KR102168930B1 - 상태 머신 엔진에 의해 수신된 데이터를 제공하기 위한 방법 및 장치 - Google Patents
상태 머신 엔진에 의해 수신된 데이터를 제공하기 위한 방법 및 장치 Download PDFInfo
- Publication number
- KR102168930B1 KR102168930B1 KR1020157027385A KR20157027385A KR102168930B1 KR 102168930 B1 KR102168930 B1 KR 102168930B1 KR 1020157027385 A KR1020157027385 A KR 1020157027385A KR 20157027385 A KR20157027385 A KR 20157027385A KR 102168930 B1 KR102168930 B1 KR 102168930B1
- Authority
- KR
- South Korea
- Prior art keywords
- data
- state machine
- machine engine
- block
- receiving
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4027—Coupling between buses using bus bridges
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4498—Finite state machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Logic Circuits (AREA)
- Multi Processors (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Information Transfer Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Debugging And Monitoring (AREA)
- Combined Controls Of Internal Combustion Engines (AREA)
Abstract
장치는 프로세서(12)로부터 데이터 스트림(170)의 제1 부분을 수신하도록 구성된 제1 상태 머신 엔진(14) 및 프로세서(12)로부터 데이터 스트림(170)의 제2 부분을 수신하도록 구성된 제2 상태 머신 엔진(14)을 포함할 수 있다. 장치는 제1과 제2 상태 머신 엔진(14) 간에 데이터 전송을 가능하게 하도록 구성된 버퍼 인터페이스(136)를 포함한다. 버퍼 인터페이스(136)는 제1 및 제2 상태 머신 엔진(14)에 결합된 인터페이스 데이터 버스(376)를 포함한다. 버퍼 인터페이스(136)는 제1과 제2 상태 머신 엔진(14) 간에 데이터를 제공하도록 구성된다.
Description
관련 출원에 대한 상호 참조
본 출원은 2013년 3월 15일자로 출원된 미국 특허 출원 일련 번호 제61/788,364호의 정규 출원이다.
기술분야
본 발명의 실시예는 일반적으로는 전자 디바이스에 관한 것이고, 더 구체적으로, 소정 실시예에서는, 데이터 분석을 위한 병렬 디바이스를 갖는 전자 디바이스에 관한 것이다.
복잡한 데이터 분석(예를 들어, 패턴 인식)은 관용적 폰 노이만(von Neumann) 기반 컴퓨터 상에서 수행하기에는 비효율적일 수 있다. 그렇지만, 생물체의 두뇌, 특히 인간의 두뇌는 복잡한 데이터 분석을 수행하는데 능숙하다. 현재의 연구는 인간의 두뇌가 신피질 내 일련의 계층적으로 조직된 뉴런 층을 사용하여 데이터 분석을 수행함을 시사한다. 계층의 하위층 내 뉴런은 예를 들어 감각 기관으로부터의 "원시 신호"들을 분석하는 한편, 상위층 내 뉴런은 하위 레벨 내 뉴런으로부터의 신호 출력을 분석한다. 신피질 내 이러한 계층적 시스템은, 가능하게는 두뇌의 다른 영역과 조합하여, 인간이 공간 추리, 의식적 사고 및 복잡한 언어와 같은 높은 레벨 기능을 수행 가능하게 하는 복잡한 데이터 분석을 달성한다.
컴퓨팅 분야에 있어서는, 패턴 인식 태스크가, 예를 들어, 점점 도전 과제로 되고 있다. 이제껏 없었던 큰 볼륨의 데이터가 컴퓨터 간 송신되고, 사용자가 검출하기를 바라는 패턴의 수가 증가하고 있다. 예를 들어, 스팸 또는 멀웨어는 보통은 데이터 스트림 내 패턴, 예를 들어, 특정 문구 또는 코드 조각을 찾음으로써 검출된다. 새로운 변종을 찾도록 새로운 패턴이 구현될 수 있으므로, 패턴의 수는 스팸 및 멀웨어의 다양성에 따라 증가한다. 이들 패턴의 각각을 찾도록 데이터 스트림을 검색하는 것은 컴퓨팅 병목을 형성할 수 있다. 보통은, 데이터 스트림이 수신될 때, 그것은 각각의 패턴을 찾도록 한번에 하나씩 검색된다. 시스템이 데이터 스트림의 다음 부분을 검색할 준비가 되기 전의 지연은 패턴의 수에 따라 증가한다. 그리하여, 패턴 인식은 데이터의 수신을 느리게 할 수 있다.
하드웨어는 패턴을 찾도록 데이터 스트림을 검색하도록 설계되었지만, 이러한 하드웨어는 주어진 시간량 내 충분한 데이터량을 프로세싱할 수 없음이 보통이다. 데이터 스트림을 검색하도록 구성된 일부 디바이스는 데이터 스트림을 복수의 회로 간 분배함으로써 그렇게 한다. 회로는 각각 데이터 스트림이 패턴의 일부와 매칭하는지 결정한다. 보통은, 다수의 회로가 병렬로 동작하고, 각각은 일반적으로 동시에 데이터 스트림을 검색한다. 그렇지만, 생체 두뇌의 것에 더 필적하는 방식으로 복잡한 데이터 분석을 수행하도록 효과적으로 허용하는 시스템은 없었다. 그러한 시스템의 개발이 바람직하다.
도 1은, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진을 갖는 시스템의 일례도;
도 2는, 본 발명의 다양한 실시예에 따라, 도 1의 상태 머신 엔진의 유한 상태 머신(finite state machine: FSM) 래티스(lattice)의 일례도;
도 3은, 본 발명의 다양한 실시예에 따라, 도 2의 FSM 래티스의 블록의 일례도;
도 4는, 본 발명의 다양한 실시예에 따라, 도 3의 블록의 로우(row), 즉, 행의 일례도;
도 5는, 본 발명의 다양한 실시예에 따라, 도 4의 로우 중 2의 그룹의 일례도;
도 6은, 본 발명의 다양한 실시예에 따라, 유한 상태 머신 그래프의 일례도;
도 7은, 본 발명의 다양한 실시예에 따라, FSM 래티스로 구현된 2-레벨 계층의 일례도;
도 8은, 본 발명의 다양한 실시예에 따라, 컴파일러가 도 2의 FSM 래티스의 프로그래밍을 위해 소스 코드를 2진 파일로 변환하는 방법의 일례도;
도 9는, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진의 예시도;
도 10은, 본 발명의 다양한 실시예에 따라, 디바이스의 랭크로 배열된 다수의 물리적 상태 머신 엔진의 일례도;
도 11은, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진에 제공될 데이터 블록으로 그룹화된 데이터 세그먼트의 일례도;
도 12는, 본 발명의 다양한 실시예에 따라, 도 11의 데이터 블록의 데이터 세그먼트 간에 삽입된 데이터 패딩의 일례도;
도 13은, 본 발명의 다양한 실시예에 따라, 도 12의 데이터 블록의 데이터 세그먼트 후에 삽입된 데이터 패딩의 일례도;
도 14는, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진의 데이터 버퍼 시스템으로의 송신을 위해 조직되는 도 13의 데이터 블록의 일례도;
도 15는, 본 발명의 다양한 실시예에 따라, 인터-랭크(IR) 버스 및 프로세스 버퍼 인터페이스에 의해 함께 결합되고 디바이스의 랭크로 배열되는 다수의 물리적 상태 머신 엔진의 일례도;
도 16은, 본 발명의 다양한 실시예에 따라, 다수의 물리적 상태 머신 엔진에 결합된 IR 버스 및 프로세스 버퍼 인터페이스의 신호의 일례도;
도 17은, 본 발명의 다양한 실시예에 따라, IR 버스 및 프로세스 버퍼 인터페이스의 신호의 타이밍 선도의 일례도;
도 18은, 본 발명의 다양한 실시예에 따라, 다수의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진의 데이터 버퍼에 저장된 데이터의 일례도;
도 19는, 본 발명의 다양한 실시예에 따라, 다수의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진의 프로세스 버퍼에 저장된 데이터의 일례도;
도 20은, 본 발명의 다양한 실시예에 따라, 하나의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진의 데이터 버퍼에 저장된 데이터의 일례도; 및
도 21은, 본 발명의 다양한 실시예에 따라, 하나의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진의 프로세스 버퍼에 저장된 데이터의 일례도.
도 2는, 본 발명의 다양한 실시예에 따라, 도 1의 상태 머신 엔진의 유한 상태 머신(finite state machine: FSM) 래티스(lattice)의 일례도;
도 3은, 본 발명의 다양한 실시예에 따라, 도 2의 FSM 래티스의 블록의 일례도;
도 4는, 본 발명의 다양한 실시예에 따라, 도 3의 블록의 로우(row), 즉, 행의 일례도;
도 5는, 본 발명의 다양한 실시예에 따라, 도 4의 로우 중 2의 그룹의 일례도;
도 6은, 본 발명의 다양한 실시예에 따라, 유한 상태 머신 그래프의 일례도;
도 7은, 본 발명의 다양한 실시예에 따라, FSM 래티스로 구현된 2-레벨 계층의 일례도;
도 8은, 본 발명의 다양한 실시예에 따라, 컴파일러가 도 2의 FSM 래티스의 프로그래밍을 위해 소스 코드를 2진 파일로 변환하는 방법의 일례도;
도 9는, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진의 예시도;
도 10은, 본 발명의 다양한 실시예에 따라, 디바이스의 랭크로 배열된 다수의 물리적 상태 머신 엔진의 일례도;
도 11은, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진에 제공될 데이터 블록으로 그룹화된 데이터 세그먼트의 일례도;
도 12는, 본 발명의 다양한 실시예에 따라, 도 11의 데이터 블록의 데이터 세그먼트 간에 삽입된 데이터 패딩의 일례도;
도 13은, 본 발명의 다양한 실시예에 따라, 도 12의 데이터 블록의 데이터 세그먼트 후에 삽입된 데이터 패딩의 일례도;
도 14는, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진의 데이터 버퍼 시스템으로의 송신을 위해 조직되는 도 13의 데이터 블록의 일례도;
도 15는, 본 발명의 다양한 실시예에 따라, 인터-랭크(IR) 버스 및 프로세스 버퍼 인터페이스에 의해 함께 결합되고 디바이스의 랭크로 배열되는 다수의 물리적 상태 머신 엔진의 일례도;
도 16은, 본 발명의 다양한 실시예에 따라, 다수의 물리적 상태 머신 엔진에 결합된 IR 버스 및 프로세스 버퍼 인터페이스의 신호의 일례도;
도 17은, 본 발명의 다양한 실시예에 따라, IR 버스 및 프로세스 버퍼 인터페이스의 신호의 타이밍 선도의 일례도;
도 18은, 본 발명의 다양한 실시예에 따라, 다수의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진의 데이터 버퍼에 저장된 데이터의 일례도;
도 19는, 본 발명의 다양한 실시예에 따라, 다수의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진의 프로세스 버퍼에 저장된 데이터의 일례도;
도 20은, 본 발명의 다양한 실시예에 따라, 하나의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진의 데이터 버퍼에 저장된 데이터의 일례도; 및
도 21은, 본 발명의 다양한 실시예에 따라, 하나의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진의 프로세스 버퍼에 저장된 데이터의 일례도.
이제 도면을 보면, 도 1은 일반적으로 참조 숫자(10)에 의해 지명된 프로세서-기반 시스템의 일 실시예를 예시하고 있다. 시스템(10)(예를 들어, 데이터 분석 시스템)은 데스크톱 컴퓨터, 랩톱 컴퓨터, 페이저, 셀룰러 폰, 퍼스널 오거나이저, 휴대용 오디오 플레이어, 제어 회로, 카메라 등과 같은 각종 유형 중 어느 것일 수 있다. 시스템(10)은 또한 라우터, 서버 또는 클라이언트(예를 들어, 앞서 설명된 유형의 컴퓨터 중 하나)와 같이 네트워크 노드일 수 있다. 시스템(10)은 복사기, 스캐너, 프린터, 게임 콘솔, 텔레비전, 셋-톱 비디오 분배 또는 레코딩 시스템, 케이블 박스, 퍼스널 디지털 미디어 플레이어, 공장 자동화 시스템, 자동차 컴퓨터 시스템 또는 의료 디바이스와 같이 어떤 다른 종류의 전자 디바이스일 수 있다. (이들 다양한 예의 시스템을 설명하도록 사용되는 용어는, 여기에서 사용되는 다른 용어 중 다수처럼, 일부 지시대상을 공유할 수 있고, 그처럼, 열거된 다른 아이템에 의해 좁게 해석되어서는 안 된다.)
시스템(10)과 같은, 전형적 프로세서-기반 디바이스에 있어서, 마이크로프로세서와 같은 프로세서(12)는 시스템(10)에서 시스템 기능 및 요청의 프로세싱을 제어한다. 더욱, 프로세서(12)는 시스템 제어를 공유하는 복수의 프로세서를 포함할 수 있다. 프로세서(12)는, 프로세서(12)가 시스템(10) 내에 또는 시스템(10)의 외부에 저장될 수 있는 명령어를 실행함으로써 시스템(10)을 제어하게 되도록, 시스템(10) 내 엘리먼트의 각각에 직접적으로 또는 간접적으로 결합될 수 있다.
여기에서 설명되는 실시예에 의하면, 시스템(10)은 프로세서(12)의 제어 하에 동작할 수 있는 상태 머신 엔진(14)을 포함한다. 여기에서 사용되는 바와 같이, 상태 머신 엔진(14)은 단일 디바이스(예를 들어, 단일 칩)를 가리킨다. 상태 머신 엔진(14)은 어떠한 오토마톤 이론이라도 채용할 수 있다. 예를 들어, 상태 머신 엔진(14)은, 국한되는 것은 아니지만, 밀리(Mealy) 아키텍처, 무어(Moore) 아키텍처, 유한 상태 머신(FSM)들, 결정론적 FSM(DFSM)들, 비트-병렬 상태 머신(BPSM) 등을 포함하는 여러 상태 머신 아키텍처 중 하나를 채용할 수 있다. 각종 아키텍처가 사용될 수 있더라도, 논의 목적으로, 본 출원은 FSM을 가리킨다. 그렇지만, 당업자는 설명된 기술이 각종 상태 머신 아키텍처 중 어느 하나를 사용하여 채용될 수 있음을 인식할 것이다.
아래에서 더 논의되는 바와 같이, 상태 머신 엔진(14)은 여러(예를 들어, 하나 이상) 유한 상태 머신(FSM) 래티스(예를 들어, 상태 머신 엔진(14)의 코어)를 포함할 수 있다. 본 출원의 목적으로, 용어 "래티스"는 엘리먼트(예를 들어, 불 셀, 카운터 셀, 상태 머신 엘리먼트, 상태 이행 엘리먼트)의 조직화된 프레임워크(예를 들어, 라우팅 매트릭스, 라우팅 네트워크, 프레임)를 가리킨다. 더욱, "래티스"는 어떠한 적합한 형상, 구조 또는 계층적 조직(예를 들어, 그리드, 큐브, 구, 캐스케이딩)이라도 가질 수 있다. 각각의 FSM 래티스는 동일한 데이터를 병렬로 각각 수신 및 분석하는 다수의 FSM을 구현할 수 있다. 더욱, FSM 래티스는, FSM 래티스의 클러스터가 동일한 입력 데이터를 병렬로 분석할 수 있게 되도록, 그룹(예를 들어, 클러스터)으로 배열될 수 있다. 더욱, 상태 머신 엔진(14)의 FSM 래티스의 클러스터는 계층적 구조로 배열될 수 있으며, 여기서는 계층적 구조의 하위 레벨 상의 상태 머신 래티스로부터의 출력이 상위 레벨 상의 상태 머신 래티스로의 입력으로서 사용될 수 있다. 계층적 구조를 통해 직렬로 상태 머신 엔진(14)의 병렬 FSM 래티스의 클러스터를 캐스케이딩함으로써, 점점 복잡한 패턴이 분석(예를 들어, 평가, 검색 등)될 수 있다.
더욱, 상태 머신 엔진(14)의 계층적 병렬 구성에 기반하여, 상태 머신 엔진(14)은 높은 프로세싱 속도를 이용하는 시스템에서 복잡한 데이터 분석(예를 들어, 패턴 인식)을 위해 채용될 수 있다. 예를 들면, 여기에서 설명되는 실시예는 1 GByte/sec의 프로세싱 속도를 갖는 시스템에 편입될 수 있다. 따라서, 상태 머신 엔진(14)을 이용하여, 고속 메모리 디바이스 또는 다른 외부 디바이스로부터의 데이터가 급속하게 분석될 수 있다. 상태 머신 엔진(14)은, 예를 들어 단일 디바이스 사이클 동안, 대략 동시에 수개의 기준(예를 들어, 검색 용어)에 따라 데이터 스트림을 분석할 수 있다. 어느 레벨의 상태 머신 엔진(14) 상의 FSM의 클러스터 내 FSM 래티스의 각각은 대략 동시에 데이터 스트림으로부터 동일한 검색 용어를 각각 수신할 수 있고, 병렬 FSM 래티스의 각각은 그 용어가 프로세싱 기준 내 다음 상태로 상태 머신 엔진(14)을 전진시키는지 결정할 수 있다. 상태 머신 엔진(14)은 비교적 다수의, 예를 들어, 100 초과, 1000 초과 또는 10,000 초과의 기준에 따라 용어를 분석할 수 있다. 그들은 병렬로 동작하기 때문에, 그들은, 데이터 스트림을 느리게 함이 없이, 비교적 높은 대역폭을 갖는 데이터 스트림, 예를 들어, 1 GByte/sec보다 크거나 일반적으로 같은 데이터 스트림에 기준을 적용할 수 있다.
일 실시예에 있어서, 상태 머신 엔진(14)은 데이터 스트림 내 막대한 수의 패턴을 인식(예를 들어, 검출)하도록 구성될 수 있다. 예를 들면, 상태 머신 엔진(14)은 사용자 또는 다른 엔티티가 분석하기를 바랄 수 있는 각종 유형의 데이터 스트림 중 하나 이상 내 패턴을 검출하도록 이용될 수 있다. 예를 들어, 상태 머신 엔진(14)은 인터넷을 통해 수신되는 패킷 또는 셀룰러 네트워크를 통해 수신되는 데이터와 같이, 네트워크를 통해 수신되는 데이터 스트림을 분석하도록 구성될 수 있다. 일례에 있어서, 상태 머신 엔진(14)은 스팸 또는 멀웨어를 찾도록 데이터 스트림을 분석하도록 구성될 수 있다. 데이터 스트림은, 데이터가 일시적으로, 사전식으로 또는 의미상으로 중요한 순서로 등, 의미를 갖는 순서로 수신되는 직렬 데이터 스트림으로서 수신될 수 있다. 대안으로, 데이터 스트림은 병렬로 또는 순서 없이 수신되고, 그 후, 예를 들어 인터넷을 통해 수신된 패킷의 순서를 재정렬함으로써 직렬 데이터 스트림으로 변환될 수 있다. 일부 실시예에 있어서, 데이터 스트림은 용어를 직렬로 제시할 수 있지만, 용어의 각각을 표현하는 비트는 병렬로 수신될 수 있다. 데이터 스트림은 시스템(10) 외부의 소스로부터 수신될 수도 있고, 메모리(16)와 같은 메모리 디바이스에 질문하고 메모리(16)에 저장된 데이터로부터 데이터 스트림을 형성함으로써 형성될 수도 있다. 다른 예에 있어서, 상태 머신 엔진(14)은 어떤 단어를 철자하는 문자 시퀀스, 유전자를 지정하는 유전 염기 쌍 시퀀스, 이미지의 일부분을 형성하는 화상 또는 비디오 파일 내 비트 시퀀스, 프로그램의 일부분을 형성하는 실행가능한 파일 내 비트 시퀀스, 또는 노래 또는 구어의 일부분을 형성하는 오디오 파일 내 비트 시퀀스를 인식하도록 구성될 수 있다. 분석될 데이터 스트림은 2진 포맷 또는 다른 포맷, 예를 들어, 10진, ASCII 등의 다수의 데이터 비트를 포함할 수 있다. 스트림은 단일 디지트 또는 다수 디지트, 예를 들어, 수개의 2진 디지트로 데이터를 인코딩할 수 있다.
인식될 바와 같이, 시스템(10)은 메모리(16)를 포함할 수 있다. 메모리(16)는 동적 램(DRAM), 정적 램(SRAM), 동기식 DRAM(SDRAM), 더블 데이터 레이트 DRAM(DDR SDRAM), DDR2 SDRAM, DDR3 SDRAM 등과 같은 휘발성 메모리를 포함할 수 있다. 메모리(16)는 또한 휘발성 메모리와 함께 사용될, 롬(ROM), PC-RAM, SONOS(silicon-oxide-nitride-oxide-silicon) 메모리, MONOS(metal-oxide-nitride-oxide-silicon) 메모리, 폴리실리콘 부동 게이트 기반 메모리, 및/또는 다양한 아키텍처의 다른 유형의 플래시 메모리(예를 들어, NAND 메모리, NOR 메모리 등)와 같은, 비-휘발성 메모리를 포함할 수 있다. 메모리(16)는 상태 머신 엔진(14)에 의해 분석될 데이터를 제공할 수 있는, DRAM 디바이스와 같은, 하나 이상의 메모리 디바이스를 포함할 수 있다. 여기에서 사용되는 바와 같이, 용어 "제공"은 지시, 입력, 삽입, 보내기, 전송, 송신, 발생, 부여, 출력, 배치, 쓰기 등을 총칭하여 가리킬 수 있다. 그러한 디바이스는 솔리드 스테이트 드라이브(SSD)들, 멀티미디어 미디어 카드(MMC)들, 시큐어 디지털(SD) 카드, 콤팩트 플래시(CF) 카드 또는 어떠한 다른 적합한 디바이스라도 포함할 수 있거나 지칭될 수 있다. 더욱, 그러한 디바이스는 범용 직렬 버스(USB), 주변 컴포넌트 상호접속(PCI), PCI 익스프레스(PCI-E), 소형 컴퓨터 시스템 인터페이스(SCSI), IEEE 1394(파이어와이어) 또는 어느 다른 적합한 인터페이스와 같은, 어떠한 적합한 인터페이스라도 통하여 시스템(10)에 결합할 수 있다. 플래시 메모리 디바이스와 같은, 메모리(16)의 동작을 용이하게 하기 위해, 시스템(10)은 메모리 컨트롤러(예시하지 않음)를 포함할 수 있다. 인식될 바와 같이, 메모리 컨트롤러는 독립 디바이스일 수도 있고 그것은 프로세서(12)와 일체일 수도 있다. 부가적으로, 시스템(10)은 자기 저장 디바이스와 같은 외부 저장소(18)를 포함할 수 있다. 외부 저장소는 또한 상태 머신 엔진(14)에 입력 데이터를 제공할 수 있다.
시스템(10)은 여러 부가적 엘리먼트를 포함할 수 있다. 예를 들면, 컴파일러(20)가, 도 8에 관하여 더 상세히 설명되는 바와 같이, 상태 머신 엔진(14)을 구성(예를 들어, 프로그래밍)하도록 사용될 수 있다. 입력 디바이스(22)는 또한 사용자가 데이터를 시스템(10)에 입력할 수 있게 하도록 프로세서(12)에 결합될 수 있다. 예를 들면, 입력 디바이스(22)는 상태 머신 엔진(14)에 의한 추후 분석을 위해 메모리(16)에 데이터를 입력하도록 사용될 수 있다. 입력 디바이스(22)는, 예를 들면, 버튼, 스위칭 엘리먼트, 키보드, 라이트 펜, 스타일러스, 마우스 및/또는 음성 인식 시스템을 포함할 수 있다. 디스플레이와 같은 출력 디바이스(24)가 또한 프로세서(12)에 결합될 수 있다. 디스플레이(24)는, 예를 들어, LCD, CRT, LED 및/또는 오디오 디스플레이를 포함할 수 있다. 시스템은 또한, 인터넷과 같은 네트워크와 인터페이싱하기 위해, 네트워크 인터페이스 카드(NIC)와 같은, 네트워크 인터페이스 디바이스(26)를 포함할 수 있다. 인식될 바와 같이, 시스템(10)은, 시스템(10)의 애플리케이션에 의존하여, 많은 다른 컴포넌트를 포함할 수 있다.
도 2 내지 도 5는 FSM 래티스(30)의 일례를 도시하고 있다. 일례에 있어서, FSM 래티스(30)는 블록(32)의 어레이를 포함한다. 설명될 바와 같이, 각각의 블록(32)은 FSM 내 복수의 상태에 대응하는 복수의 선택적으로 결합-가능한 하드웨어 엘리먼트(예를 들어, 구성가능 엘리먼트 및/또는 특수 목적 엘리먼트)를 포함할 수 있다. FSM 내 상태에 유사하게, 하드웨어 엘리먼트는 입력 스트림을 분석하고, 입력 스트림에 기반하여, 다운스트림 하드웨어 엘리먼트를 활성화할 수 있다.
구성가능 엘리먼트는 많은 다른 기능을 구현하도록 구성(예를 들어, 프로그래밍)될 수 있다. 예를 들면, 구성가능 엘리먼트는 로우(row)(38)(도 3 및 도 4에 도시됨) 및 블록(32)(도 2 및 도 3에 도시됨)으로 계층적으로 조직되는 상태 머신 엘리먼트(SME)(34, 36)(도 5에 도시됨)들을 포함할 수 있다. SME들은 또한 상태 이행 엘리먼트(STE)들로 생각될 수 있다. 계층적으로 조직된 SME(34, 36) 간 신호를 라우팅하기 위해, 인터-블록 스위칭 엘리먼트(40)(도 2 및 도3에 도시됨), 인트라-블록 스위칭 엘리먼트(42)(도 3 및 도 4에 도시됨) 및 인트라-로우 스위칭 엘리먼트(44)(도 4에 도시됨)를 포함하는 구성가능 스위칭 엘리먼트 계층이 사용될 수 있다.
아래에서 설명되는 바와 같이, 스위칭 엘리먼트는 라우팅 구조 및 버퍼를 포함할 수 있다. SME(34, 36)는 FSM 래티스(30)에 의해 구현된 FSM의 상태에 대응할 수 있다. SME(34, 36)는 아래에 설명되는 바와 같이 구성가능 스위칭 엘리먼트를 사용함으로써 함께 결합될 수 있다. 따라서, FSM은 SME(34, 36)가 상태 함수에 대응하도록 구성함으로써 그리고 FSM 내 상태 간 이행에 대응하도록 SME(34, 36)를 선택적으로 함께 결합함으로써 FSM 래티스(30) 상에서 구현될 수 있다.
도 2는 FSM 래티스(30)의 일례의 전반적 보기를 예시하고 있다. FSM 래티스(30)는 구성가능 인터-블록 스위칭 엘리먼트(40)와 선택적으로 함께 결합될 수 있는 복수의 블록(32)을 포함한다. 인터-블록 스위칭 엘리먼트(40)는 도체(46)(예를 들어, 와이어, 트레이스 등) 및 버퍼(48, 50)를 포함할 수 있다. 일례에 있어서, 버퍼(48, 50)는 인터-블록 스위칭 엘리먼트(40) 내/외로 신호의 접속 및 타이밍을 제어하도록 포함된다. 아래에 더 설명되는 바와 같이, 버퍼(48)는 블록(32) 간 보내지는 데이터를 버퍼링하도록 제공될 수 있는 한편, 버퍼(50)는 인터-블록 스위칭 엘리먼트(40) 간 보내지는 데이터를 버퍼링하도록 제공될 수 있다. 부가적으로, 블록(32)은 신호(예를 들어, 데이터)를 수신하고 데이터를 블록(32)에 제공하도록 입력 블록(52)(예를 들어, 데이터 입력 포트)에 선택적으로 결합될 수 있다. 블록(32)은 또한 블록(32)으로부터의 신호를 외부 디바이스(예를 들어, 또 다른 FSM 래티스(30))에 제공하도록 출력 블록(54)(예를 들어, 출력 포트)에 선택적으로 결합될 수 있다. FSM 래티스(30)는 또한 FSM 래티스(30)를 (예를 들어, 이미지, 프로그램을 통하여) 구성하도록 프로그래밍 인터페이스(56)를 포함할 수 있다. 이미지는 SME(34, 36)의 상태를 구성(예를 들어, 설정)할 수 있다. 즉, 이미지는 입력 블록(52)에서 주어진 입력에 소정 방식으로 반응하도록 SME(34, 36)를 구성할 수 있다. 예를 들어, SME(34, 36)는 문자 'a'가 입력 블록(52)에서 수신될 때 높은 신호를 출력하도록 설정될 수 있다.
일례에 있어서, 입력 블록(52), 출력 블록(54), 및/또는 프로그래밍 인터페이스(56)는 레지스터에 쓰기 또는 그로부터 읽기가 각각의 엘리먼트에 또는 그로부터 데이터를 제공하게 되도록 레지스터로서 구현될 수 있다. 따라서, 프로그래밍 인터페이스(56)에 대응하는 레지스터에 저장된 이미지로부터의 비트는 SME(34, 36) 상에 로딩될 수 있다. 도 2가 블록(32), 입력 블록(52), 출력 블록(54) 그리고 인터-블록 스위칭 엘리먼트(40) 간 소정 수의 도체(예를 들어, 와이어, 트레이스)를 예시하고 있기는 하지만, 다른 예에서는, 더 적거나 더 많은 도체가 사용될 수 있음을 이해해야 한다.
도 3은 블록(32)의 일례를 도시하고 있다. 블록(32)은 구성가능 인트라-블록 스위칭 엘리먼트(42)와 선택적으로 함께 결합될 수 있는 복수의 로우(38)를 포함할 수 있다. 부가적으로, 로우(38)는 인터-블록 스위칭 엘리먼트(40)로 또 다른 블록(32) 내 또 다른 로우(38)에 선택적으로 결합될 수 있다. 로우(38)는 여기서는 2의 그룹(GOT)(60)들이라고 지칭되는 엘리먼트 쌍으로 조직되는 복수의 SME(34, 36)를 포함한다. 일례에 있어서, 블록(32)은 열여섯(16)개의 로우(38)를 포함한다.
도 4는 로우(38)의 일례를 도시하고 있다. GOT(60)는 구성가능 인트라-로우 스위칭 엘리먼트(44)에 의해 로우(38) 내 다른 GOT(60) 및 어느 다른 엘리먼트(예를 들어, 특수 목적 엘리먼트(58))에 선택적으로 결합될 수 있다. GOT(60)는 또한 인트라-블록 스위칭 엘리먼트(42)로 다른 로우(38) 내 다른 GOT(60)에, 또는 인터-블록 스위칭 엘리먼트(40)로 다른 블록(32) 내 다른 GOT(60)에 결합될 수 있다. 일례에 있어서, GOT(60)는 제1 및 제2 입력(62, 64) 및 출력(66)을 갖는다. 도 5를 참조하여 더 예시될 바와 같이, 제1 입력(62)은 GOT(60)의 제1 SME(34)에 결합되고 제2 입력(64)은 GOT(60)의 제2 SME(36)에 결합된다.
일례에 있어서, 로우(38)는 제1 및 제2 복수의 로우 상호접속 도체(68, 70)를 포함한다. 일례에 있어서, GOT(60)의 입력(62, 64)은 하나 이상의 로우 상호접속 도체(68, 70)에 결합될 수 있고, 출력(66)은 하나 이상의 로우 상호접속 도체(68, 70)에 결합될 수 있다. 일례에 있어서, 제1 복수의 로우 상호접속 도체(68)는 로우(38) 내 각각의 GOT(60)의 각각의 SME(34, 36)에 결합될 수 있다. 제2 복수의 로우 상호접속 도체(70)는 로우(38) 내 각각의 GOT(60)의 하나의 SME(34, 36)에만 결합될 수 있고, GOT(60)의 다른 하나의 SME(34, 36)에는 결합될 수 없다. 일례에 있어서, 도 5를 참조하여 더 잘 예시될 바와 같이, 제2 복수의 로우 상호접속 도체(70)의 제1 하프는 로우(38) 내 SME(34, 36)의 제1 하프(각각의 GOT(60)로부터의 하나의 SME(34))에 결합할 수 있고, 제2 복수의 로우 상호접속 도체(70)의 제2 하프는 로우(38) 내 SME(34, 36)의 제2 하프(각각의 GOT(60)로부터의 다른 하나의 SME(34, 36))에 결합할 수 있다. 제2 복수의 로우 상호접속 도체(70)와 SME(34, 36) 간 제한된 접속성은 여기서는 "패리티"라고 지칭된다. 일례에 있어서, 로우(38)는 또한 카운터, 구성가능 불 로직 엘리먼트, 룩-업 테이블, RAM, 필드 구성가능 게이트 어레이(FPGA), 주문형 반도체(ASIC), 구성가능 프로세서(예를 들어, 마이크로프로세서), 또는 특수 목적 기능을 수행하기 위한 다른 엘리먼트와 같은 특수 목적 엘리먼트(58)를 포함할 수 있다.
일례에 있어서, 특수 목적 엘리먼트(58)는 카운터(여기서는 카운터(58)라고도 지칭됨)를 포함한다. 일례에 있어서, 카운터(58)는 12-비트 구성가능 다운 카운터를 포함한다. 12-비트 구성가능 카운터(58)는 카운팅 입력, 리셋 입력 및 영-카운트 출력을 갖는다. 카운팅 입력은, 표명될 때, 카운터(58)의 값을 1만큼 감분한다. 리셋 입력은, 표명될 때, 카운터(58)가 연관된 레지스터로부터 초기 값을 로딩하게 야기한다. 12-비트 카운터(58)에 대하여, 12-비트까지의 수가 초기 값으로서 로딩되어 들어올 수 있다. 카운터(58)의 값이 영(0)으로 감분될 때, 영-카운트 출력이 표명된다. 카운터(58)는 또한 적어도 2개의 모드, 펄스 및 홀드를 갖는다. 카운터(58)가 펄스 모드로 설정될 때, 영-카운트 출력은 카운터(58)가 영에 도달하고 클록이 사이클링할 때 표명된다. 영-카운트 출력은 카운터(58)의 다음 클록 사이클 동안 표명된다. 결과적으로 카운터(58)가 클록 사이클로부터 시간이 오프셋된다. 다음 클록 사이클에서, 영-카운트 출력은 더 이상 표명되지 않는다. 카운터(58)가 홀드 모드로 설정될 때, 영-카운트 출력은 카운터(58)가 영으로 감분되는 클록 사이클 동안 표명되고, 카운터(58)가 리셋 입력이 표명되는 것에 의해 리셋될 때까지 표명으로 머무른다.
다른 일례에 있어서, 특수 목적 엘리먼트(58)는 불 로직을 포함한다. 예를 들어, 불 로직은, AND, OR, NAND, NOR, SoP(Sum of Products), NSoP(Negated-Output Sum of Products), NPoS(Negated-Output Product of Sume) 및 PoS(Product of Sums) 함수와 같은, 논리 함수를 수행하도록 사용될 수 있다. 이러한 불 로직은 FSM 래티스(30) 내 (여기에서 추후 논의되는 바와 같이, FSM의 터미널 노드에 대응하는) 터미널 상태 SME로부터 데이터를 추출하도록 사용될 수 있다. 추출되는 데이터는 상태 데이터를 다른 FSM 래티스(30)에 제공하도록 그리고/또는 FSM 래티스(30)를 재구성하거나 또 다른 FSM 래티스(30)를 재구성하는데 사용되는 구성 데이터를 제공하도록 사용될 수 있다.
도 5는 GOT(60)의 일례를 도시하고 있다. GOT(60)는 입력(62, 64)을 갖는 제1 SME(34) 및 제2 SME(36)를 포함하고 그들 출력(72, 74)은 OR 게이트(76) 및 3-대-1 멀티플렉서(78)에 결합되어 있다. 3-대-1 멀티플렉서(78)는 GOT(60)의 출력(66)을 제1 SME(34)에든 제2 SME(36)에든 OR 게이트(76)에든 결합하도록 설정될 수 있다. OR 게이트(76)는 GOT(60)의 공통 출력(66)을 형성하도록 양 출력(72, 74)을 함께 결합하는데 사용될 수 있다. 일례에 있어서, 제1 및 제2 SME(34, 36)는, 위에 논의된 바와 같이, 패리티를 나타내 보이고, 여기서 제1 SME(34)의 입력(62)은 로우 상호접속 도체(68) 중 일부에 결합될 수 있고 제2 SME(36)의 입력(64)은 다른 로우 상호접속 도체(70)에 결합될 수 있고 공통 출력(66)이 산출될 수 있어서 패리티 문제를 극복할 수 있다. 일례에 있어서, GOT(60) 내 2개의 SME(34, 36)는 스위칭 엘리먼트(79) 중 둘 다 또는 어느 하나를 설정함으로써 그들 자신에게로 백루프되고 그리고/또는 캐스케이딩될 수 있다. SME(34, 36)는 SME(34, 36)의 출력(72, 74)을 다른 SME(34, 36)의 입력(62, 64)에 결합함으로써 캐스케이딩될 수 있다. SME(34, 36)는 출력(72, 74)을 그들 자신의 입력(62, 64)에 결합함으로써 그들 자신에게로 백루프될 수 있다. 따라서, 제1 SME(34)의 출력(72)은 제1 SME(34)의 입력(62) 및 제2 SME(36)의 입력(64) 중 하나 또는 둘 다에 결합되거나 그 중 어느 것에도 결합되지 않을 수 있다.
일례에 있어서, 상태 머신 엘리먼트(34, 36)는 검출 라인(82)에 병렬로 결합된, 동적 램(DRAM)에서 흔히 사용되는 것들과 같은, 복수의 메모리 셀(80)을 포함한다. 하나의 그러한 메모리 셀(80)은, 하이(high) 또는 로우(low) 값(예를 들어, 1 또는 0) 중 어느 하나에 대응하는 것과 같은, 데이터 상태로 설정될 수 있는 메모리 셀을 포함한다. 메모리 셀(80)의 출력은 검출 라인(82)에 결합되고 메모리 셀(80)로의 입력은 데이터 스트림 라인(84) 상의 데이터에 기반하여 신호를 수신한다. 일례에 있어서, 입력 블록(52)에서의 입력은 메모리 셀(80) 중 하나 이상을 선택하도록 디코딩된다. 선택된 메모리 셀(80)은 그 저장된 데이터 상태를 검출 라인(82) 상으로의 출력으로서 제공한다. 예를 들어, 입력 블록(52)에서 수신된 데이터는 디코더(도시되지 않음)에 제공될 수 있고 디코더는 데이터 스트림 라인(84) 중 하나 이상을 선택할 수 있다. 일례에 있어서, 디코더는 8-비트 ACSII 문자를 256 데이터 스트림 라인(84) 중 대응하는 1로 변환할 수 있다.
그래서, 메모리 셀(80)은 메모리 셀(80)이 하이 값으로 설정되고 데이터 스트림 라인(84) 상의 데이터가 메모리 셀(80)을 선택할 때 검출 라인(82)에 하이 신호를 출력한다. 데이터 스트림 라인(84) 상의 데이터가 메모리 셀(80)을 선택하고 메모리 셀(80)이 로우 값으로 설정될 때, 메모리 셀(80)은 검출 라인(82)에 로우 신호를 출력한다. 메모리 셀(80)로부터 검출 라인(82) 상으로의 출력은 검출 셀(86)에 의해 감지된다.
일례에 있어서, 입력 라인(62, 64) 상의 신호는 각각의 검출 셀(86)을 활성 또는 비활성 상태 중 어느 하나로 설정한다. 비활성 상태로 설정될 때, 검출 셀(86)은 각각의 검출 라인(82) 상의 신호에 무관하게 각각의 출력(72, 74) 상에 로우 신호를 출력한다. 활성 상태로 설정될 때, 검출 셀(86)은 하이 신호가 각각의 SME(34, 36)의 메모리 셀(82) 중 하나로부터 검출될 때 각각의 출력 라인(72, 74) 상에 하이 신호를 출력한다. 활성 상태에 있을 때, 검출 셀(86)은 각각의 SME(34, 36)의 메모리 셀(82) 전부로부터의 신호가 로우일 때 각각의 출력 라인(72, 74) 상에 로우 신호를 출력한다.
일례에 있어서, SME(34, 36)는 256개의 메모리 셀(80)을 포함하고, 각각의 메모리 셀(80)은 서로 다른 데이터 스트림 라인(84)에 결합되어 있다. 그리하여, SME(34, 36)는 데이터 스트림 라인(84) 중 선택된 하나 이상이 하이 신호를 거기에 갖고 있을 때 하이 신호를 출력하도록 프로그래밍될 수 있다. 예를 들어, SME(34)는 제1 메모리 셀(80)(예를 들어, 비트 0)을 하이로 설정하고 모든 다른 메모리 셀(80)(예를 들어, 비트 1-255)을 로우로 설정해 놓을 수 있다. 각각의 검출 셀(86)이 활성 상태에 있을 때, SME(34)는 비트 0에 대응하는 데이터 스트림 라인(84)이 거기에 하이 신호를 갖고 있을 때 출력(72) 상에 하이 신호를 출력한다. 다른 예에 있어서, SME(34)는 적합한 메모리 셀(80)을 하이 값으로 설정함으로써 다수의 데이터 스트림 라인(84) 중 하나가 거기에 하이 신호를 갖고 있을 때 하이 신호를 출력하도록 설정될 수 있다.
일례에 있어서, 메모리 셀(80)은 연관된 레지스터로부터 비트를 읽음으로써 하이 또는 로우 값으로 설정될 수 있다. 따라서, SME(34)는 컴파일러(20)에 의해 생성된 이미지를 레지스터에 저장하고 레지스터 내 비트를 연관된 메모리 셀(80)에 로딩함으로써 구성될 수 있다. 일례에 있어서, 컴파일러(20)에 의해 생성된 이미지는 하이 및 로우(예를 들어, 1 및 0) 비트의 2진 이미지를 포함한다. 이미지는 SME(34, 36)를 캐스케이딩함으로써 FSM을 구현하도록 FSM 래티스(30)를 구성할 수 있다. 예를 들어, 제1 SME(34)는 검출 셀(86)을 활성 상태로 설정함으로써 활성 상태로 설정될 수 있다. 제1 SME(34)는 비트 0에 대응하는 데이터 스트림 라인(84)이 거기에 하이 신호를 가질 때 하이 신호를 출력하도록 설정될 수 있다. 제2 SME(36)는 처음에는 비활성 상태로 설정될 수 있지만, 활성일 때에는, 비트 1에 대응하는 데이터 스트림 라인(84)이 거기에 하이 신호를 가질 때 하이 신호를 출력하도록 설정될 수 있다. 제1 SME(34) 및 제2 SME(36)는 제1 SME(34)의 출력(72)을 제2 SME(36)의 입력(64)에 결합하도록 설정함으로써 캐스케이딩될 수 있다. 그리하여, 하이 신호가 비트 0에 대응하는 데이터 스트림 라인(84) 상에서 감지될 때, 제1 SME(34)는 출력(72) 상에 하이 신호를 출력하고 제2 SME(36)의 검출 셀(86)을 활성 상태로 설정한다. 하이 신호가 비트 1에 대응하는 데이터 스트림 라인(84) 상에서 감지될 때, 제2 SME(36)는 FSM 래티스(30)로부터의 출력을 위해 또는 또 다른 SME(36)를 활성화하도록 출력(74) 상에 하이 신호를 출력한다.
일례에 있어서, 단일 FSM 래티스(30)는 단일 물리적 디바이스 상에 구현되지만, 다른 예에서는, 2개 이상의 FSM 래티스(30)가 단일 물리적 디바이스(예를 들어, 물리적 칩) 상에 구현될 수 있다. 일례에 있어서, 각각의 FSM 래티스(30)는 별개 데이터 입력 블록(52), 별개 출력 블록(54), 별개 프로그래밍 인터페이스(56) 및 별개 구성가능 엘리먼트 세트를 포함할 수 있다. 더욱, 각각의 구성가능 엘리먼트 세트는 그들의 대응하는 데이터 입력 블록(52)에서의 데이터에 반응(예를 들어, 하이 또는 로우 신호를 출력)할 수 있다. 예를 들어, 제1 FSM 래티스(30)에 대응하는 제1 구성가능 엘리먼트 세트는 제1 FSM 래티스(30)에 대응하는 제1 데이터 입력 블록(52)에서의 데이터에 반응할 수 있다. 제2 FSM 래티스(30)에 대응하는 제2 구성가능 엘리먼트 세트는 제2 FSM 래티스(30)에 대응하는 제2 데이터 입력 블록(52)에서의 데이터에 반응할 수 있다. 따라서, 각각의 FSM 래티스(30)는 어느 구성가능 엘리먼트 세트를 포함하되, 서로 다른 구성가능 엘리먼트 세트는 서로 다른 입력 데이터에 반응할 수 있다. 유사하게, 각각의 FSM 래티스(30), 및 각각의 대응하는 구성가능 엘리먼트 세트는 별개 출력을 제공할 수 있다. 일부 예에 있어서, 제1 FSM 래티스(30)로부터의 출력 블록(54)은, 제2 FSM 래티스(30)에 대한 입력 데이터가 일련의 FSM 래티스(30)의 계층적 배열로 제1 FSM 래티스(30)로부터의 출력 데이터를 포함할 수 있게 되도록, 제2 FSM 래티스(30)의 입력 블록(52)에 결합될 수 있다.
일례에 있어서, FSM 래티스(30) 상으로의 로딩을 위한 이미지는 FSM 래티스(30) 내 구성가능 엘리먼트, 구성가능 스위칭 엘리먼트 및 특수 목적 엘리먼트를 구성하기 위한 복수의 데이터 비트를 포함한다. 일례에 있어서, 이미지는 FSM 래티스(30)를 구성하여 소정 입력에 기반하는 소망 출력을 제공하도록 FSM 래티스(30) 상으로 로딩될 수 있다. 출력 블록(54)은 데이터 입력 블록(52)에서의 데이터에 대한 구성가능 엘리먼트의 반응에 기반하여 FSM 래티스(30)로부터의 출력을 제공할 수 있다. 출력 블록(54)으로부터의 출력은 소정 패턴의 매치를 나타내는 단일 비트, 복수의 패턴에 대한 매치 및 비-매치를 나타내는 복수의 비트를 포함하는 워드, 및 소정 순간에 어떤 또는 모든 구성가능 엘리먼트의 상태에 대응하는 상태 벡터를 포함할 수 있다. 설명되는 바와 같이, 여러 FSM 래티스(30)가, 패턴-인식(예를 들어, 음성 인식, 이미지 인식 등) 신호 프로세싱, 이미징, 컴퓨터 비전, 암호 기법 등과 같은 데이터 분석을 수행하도록, 상태 머신 엔진(14)과 같은 상태 머신 엔진에 포함될 수 있다.
도 6은 FSM 래티스(30)에 의해 구현될 수 있는 유한 상태 머신(FSM)의 일례의 모델을 예시하고 있다. FSM 래티스(30)는 FSM의 물리적 구현으로서 구성(예를 들어, 프로그래밍)될 수 있다. FSM은 하나 이상의 루트 노드(92)를 포함하고 있을 수 있는 선도(90)(예를 들어, 방향 그래프, 무방향 그래프, 의사 그래프)로서 표현될 수 있다. 루트 노드(92)에 부가하여, FSM은 수개의 표준 노드(94) 및 터미널 노드(96)로 이루어질 수 있고 그들은 하나 이상의 에지(98)를 통해 루트 노드(92) 및 다른 표준 노드(94)에 접속된다. 노드(92, 94, 96)는 FSM에서의 상태에 대응한다. 에지(98)는 상태 간 이행에 대응한다.
노드(92, 94, 96)의 각각은 활성 또는 비활성 상태 중 어느 하나일 수 있다. 비활성 상태에 있을 때, 노드(92, 94, 96)는 입력 데이터에 반응(예를 들어, 응답)하지 않는다. 활성 상태에 있어서, 노드(92, 94, 96)는 입력 데이터에 반응할 수 있다. 상류측 노드(92, 94)는 입력 데이터가 상류측 노드(92, 94)와 하류측 노드(94, 96) 간 에지(98)에 의해 지정된 기준과 매칭할 때 노드로부터 하류측인 노드(94, 96)를 활성화함으로써 입력 데이터에 반응할 수 있다. 예를 들어, 문자 'b'를 지정하는 제1 노드(94)는 제1 노드(94)가 활성이고 문자 'b'가 입력 데이터로서 수신될 때 에지(98)에 의해 제1 노드(94)에 접속된 제2 노드(94)를 활성화할 것이다. 여기서 사용되는 바와 같이, "상류측"은 하나 이상의 노드 간 관계를 지칭하며, 이 경우 하나 이상의 다른 노드의 상류측(또는 루프 또는 피드백 구성의 경우에는 그 자신의 상류측)인 제1 노드는 제1 노드가 그 하나 이상의 다른 노드를 활성화(또는 루프의 경우에는 그 자신을 활성화)할 수 있는 상황을 지칭한다. 유사하게, "하류측"은 하나 이상의 다른 노드의 하류측(또는 루프의 경우에는 그 자신의 하류측)인 제1 노드가 그 하나 이상의 다른 노드에 의해 활성화(또는 루프의 경우에는 그 자신에 의해 활성화)될 수 있는 관계를 지칭한다. 따라서, 용어 "상류측" 및 "하류측"은 여기에서는 하나 이상의 노드 간 관계를 지칭하도록 사용되지만, 이들 용어는 노드 간 다른 비-선형 경로 또는 루프의 사용을 못하게 하지는 않는다.
선도(90)에 있어서, 루트 노드(92)는 처음에 활성화될 수 있고 입력 데이터가 루트 노드(92)로부터의 에지(98)와 매칭할 때 하류측 노드(94)를 활성화할 수 있다. 노드(94)는 입력 데이터가 노드(94)로부터의 에지(98)와 매칭할 때 노드(96)를 활성화할 수 있다. 선도(90)의 곳곳에서의 노드(94, 96)는 입력 데이터가 수신될 때 이러한 방식으로 활성화될 수 있다. 터미널 노드(96)는 입력 데이터에서 관심 시퀀스의 매치에 대응한다. 따라서, 터미널 노드(96)의 활성화는 관심 시퀀스가 입력 데이터로서 수신되었음을 나타낸다. 패턴 인식 기능을 구현하는 FSM 래티스(30)의 맥락에 있어서, 터미널 노드(96)에 도착하는 것은 특정 관심 패턴이 입력 데이터에서 검출되었음을 나타낼 수 있다.
일례에 있어서, 각각의 루트 노드(92), 표준 노드(94) 및 터미널 노드(96)는 FSM 래티스(30) 내 구성가능 엘리먼트에 대응할 수 있다. 각각의 에지(98)는 구성가능 엘리먼트 간 접속에 대응할 수 있다. 그리하여, 또 다른 표준 노드(94) 또는 터미널 노드(96)로 이행하는(예를 들어, 그에 접속하는 에지(98)를 갖는) 표준 노드(94)는 또 다른 구성가능 엘리먼트로 이행하는(예를 들어, 그에 출력을 제공하는) 구성가능 엘리먼트에 대응한다. 일부 예에 있어서, 루트 노드(92)는 대응하는 구성가능 엘리먼트를 갖지 않는다.
인식될 바와 같이, 노드(92)가 루트 노드로서 설명되고 노드(96)가 터미널 노드로서 설명되고 있지만, 반드시 특정 "시작" 또는 루트 노드가 존재하는 것은 아닐 수 있고 반드시 특정 "종료" 또는 출력 노드가 존재하는 것은 아닐 수 있다. 환언하면, 어느 노드라도 시작하는 포인트가 될 수 있고 어느 노드라도 출력을 제공할 수 있다.
FSM 래티스(30)가 프로그래밍될 때, 구성가능 엘리먼트의 각각은 또한 활성 또는 비활성 상태 중 어느 하나에 있을 수 있다. 소정 구성가능 엘리먼트는, 비활성일 때, 대응하는 데이터 입력 블록(52)에서의 입력 데이터에 반응하지 않는다. 활성 구성가능 엘리먼트는 데이터 입력 블록(52)에서의 입력 데이터에 반응할 수 있고, 입력 데이터가 구성가능 엘리먼트의 설정과 매칭할 때 하류측 구성가능 엘리먼트를 활성화할 수 있다. 구성가능 엘리먼트가 터미널 노드(96)에 대응할 때, 구성가능 엘리먼트는 외부 디바이스에 매치의 표시를 제공하도록 출력 블록(54)에 결합될 수 있다.
프로그래밍 인터페이스(56)를 통하여 FSM 래티스(30) 상으로 로딩된 이미지는, 데이터 입력 블록(52)에서의 데이터에 대한 반응에 기반하여 노드의 순차적 활성화를 통해 소망의 FSM이 구현되게 되도록, 구성가능 엘리먼트 및 특수 목적 엘리먼트와 더불어, 구성가능 엘리먼트와 특수 목적 엘리먼트 간 접속도 구성할 수 있다. 일례에 있어서, 구성가능 엘리먼트는 단일 데이터 사이클(예를 들어, 단일 문자, 일 세트의 문자, 단일 클록 사이클) 동안 활성으로 남아있고, 그 후 상류측 구성가능 엘리먼트에 의해 재활성화되지 않는 한 비활성으로 된다.
터미널 노드(96)는 지난 이벤트의 압축된 이력을 저장한다고 생각될 수 있다. 예를 들어, 터미널 노드(96)에 도달하는데 필요한 입력 데이터의 하나 이상의 패턴은 그 터미널 노드(96)의 활성화에 의해 표현될 수 있다. 일례에 있어서, 터미널 노드(96)에 의해 제공되는 출력은 2진이다, 즉, 그 출력은 관심 패턴과 매칭되었는지 아닌지를 나타낸다. 선도(90)에서 터미널 노드(96) 대 표준 노드(94)의 비는 아주 작을 수 있다. 환언하면, FSM에는 고도의 복잡성이 존재할 수 있지만, FSM의 출력은 그에 비해 작을 수 있다.
일례에 있어서, FSM 래티스(30)의 출력은 상태 벡터를 포함할 수 있다. 상태 벡터는 FSM 래티스(30)의 구성가능 엘리먼트의 상태(예를 들어, 활성화됨 또는 활성화되지 않음)를 포함한다. 다른 일례에 있어서, 상태 벡터는 구성가능 엘리먼트가 터미널 노드(96)에 대응하는지 아닌지 구성가능 엘리먼트의 전부 또는 서브세트의 상태를 포함할 수 있다. 일례에 있어서, 상태 벡터는 터미널 노드(96)에 대응하는 구성가능 엘리먼트에 대한 상태를 포함한다. 그리하여, 출력은 선도(90)의 모든 터미널 노드(96)에 의해 제공되는 표시의 집합을 포함할 수 있다. 상태 벡터는 워드로서 표현될 수 있고, 이 경우 각각의 터미널 노드(96)에 의해 제공되는 2진 표시는 워드 중 하나의 비트를 포함한다. 터미널 노드(96)의 이러한 인코딩은 FSM 래티스(30)에 대한 검출 상태의 효과적 표시(예를 들어, 관심 시퀀스가 검출되었는지 및 어떤 것인지)를 제공할 수 있다.
위에서 언급된 바와 같이, FSM 래티스(30)는 패턴 인식 기능을 구현하도록 프로그래밍될 수 있다. 예를 들어, FSM 래티스(30)는 입력 데이터 내 하나 이상의 데이터 시퀀스(예를 들어, 서명, 패턴)를 인식하도록 구성될 수 있다. 관심 데이터 시퀀스가 FSM 래티스(30)에 의해 인식될 때, 그 인식의 표시가 출력 블록(54)에서 제공될 수 있다. 일례에 있어서, 패턴 인식은, 예를 들어, 네트워크 데이터 내 멀웨어 또는 다른 데이터를 식별하도록 심벌 스트링(예를 들어, ASCII 문자)을 인식할 수 있다.
도 7은 계층적 구조(100)의 일례를 도시하고 있는데, 여기서는 2 레벨의 FSM 래티스(30)가 직렬로 결합되어 데이터를 분석하도록 사용된다. 구체적으로, 도시된 실시예에 있어서, 계층적 구조(100)는 직렬로 배열된 제1 FSM 래티스(30A) 및 제2 FSM 래티스(30B)를 포함한다. 각각의 FSM 래티스(30)는 데이터 입력을 수신할 각각의 데이터 입력 블록(52), 구성하는 신호를 수신할 프로그래밍 인터페이스 블록(56) 및 출력 블록(54)을 포함한다.
제1 FSM 래티스(30A)는 입력 데이터, 예를 들어, 데이터 입력 블록에서의 원시 데이터를 수신하도록 구성된다. 제1 FSM 래티스(30A)는 위에서 설명된 바와 같이 입력 데이터에 반응하고 출력 블록에서 출력을 제공한다. 제1 FSM 래티스(30A)로부터의 출력은 제2 FSM 래티스(30B)의 데이터 입력 블록으로 보내진다. 그 후 제2 FSM 래티스(30B)는 제1 FSM 래티스(30A)에 의해 제공된 출력에 기반하여 반응하고 계층적 구조(100)의 대응하는 출력 신호(102)를 제공할 수 있다. 2개의 FSM 래티스(30A, 30B)의 이러한 계층적 직렬 결합은 제1 FSM 래티스(30A)로부터 제2 FSM 래티스(30B)로 압축된 워드로 지난 이벤트에 관한 데이터를 제공하는 수단을 제공한다. 제공된 데이터는 효과적으로는 제1 FSM 래티스(30A)에 의해 레코딩된 복잡한 이벤트(예를 들어, 관심 시퀀스)의 개요일 수 있다.
도 7에 도시된 FSM 래티스(30A, 30B)의 2-레벨 계층(100)은 2개의 독립 프로그램이 동일 데이터 스트림에 기반하여 동작할 수 있게 한다. 2-스테이지 계층은 서로 다른 영역으로서 모델링되는 생체 두뇌에서의 시각적 인식과 유사할 수 있다. 이러한 모델 하에서, 영역들은 효과적으로는 서로 다른 패턴 인식 엔진이고, 각각은 유사한 컴퓨팅 기능(패턴 매칭)을 수행하지만 서로 다른 프로그램(서명)을 사용한다. 다수의 FSM 래티스(30A, 30B)를 함께 접속함으로써, 데이터 스트림 입력에 대한 증가된 지식이 획득될 수 있다.
(제1 FSM 래티스(30A)에 의해 구현되는) 계층의 제1 레벨은, 예를 들어, 원시 데이터 스트림 상에 직접 프로세싱을 수행할 수 있다. 즉, 원시 데이터 스트림은 제1 FSM 래티스(30A)의 입력 블록(52)에서 수신될 수 있고 제1 FSM 래티스(30A)의 구성가능 엘리먼트는 원시 데이터 스트림에 반응할 수 있다. 계층의 (제2 FSM 래티스(30B)에 의해 구현되는) 제2 레벨은 제1 레벨로부터의 출력을 프로세싱할 수 있다. 즉, 제2 FSM 래티스(30B)는 제2 FSM 래티스(30B)의 입력 블록(52)에서 제1 FSM 래티스(30A)의 출력 블록(54)으로부터의 출력을 수신하고 제2 FSM 래티스(30B)의 구성가능 엘리먼트는 제1 FSM 래티스(30A)의 출력에 반응할 수 있다. 따라서, 이러한 예에 있어서, 제2 FSM 래티스(30B)는 원시 데이터 스트림을 입력으로서 수신하지는 않고, 그보다는 제1 FSM 래티스(30A)에 의해 결정되는 바와 같이 원시 데이터 스트림과 매칭되는 관심 패턴의 표시를 수신한다. 제2 FSM 래티스(30B)는 제1 FSM 래티스(30A)로부터의 출력 데이터 스트림 내 패턴을 인식하는 FSM을 구현할 수 있다. 제2 FSM 래티스(30B)는 FSM 래티스(30A)로부터의 출력을 수신하는 것에 부가하여 다수의 다른 FSM 래티스로부터 입력을 수신할 수 있음을 인식해야 한다. 마찬가지로, 제2 FSM 래티스(30B)는 다른 디바이스로부터 입력을 수신할 수 있다. 제2 FSM 래티스(30B)는 이들 다수의 입력을 조합하여 출력을 산출할 수 있다.
도 8은 FSM을 구현하기 위해 래티스(30)와 같은 FSM 래티스를 구성하도록 사용된 이미지로 소스 코드를 변환할 컴파일러를 위한 방법(110)의 일례를 도시하고 있다. 방법(110)은 소스 코드를 구문 트리로 파싱하는 단계(블록(112)), 구문 트리를 오토마톤으로 변환하는 단계(블록(114)), 오토마톤을 최적화하는 단계(블록(116)), 오토마톤을 넷리스트로 변환하는 단계(블록(118)), 넷리스트를 하드웨어 상에 배치하는 단계(블록(120)), 넷리스트를 라우팅하는 단계(블록(122)) 및 결과적 이미지를 발행하는 단계(블록(124))를 포함한다.
일례에 있어서, 컴파일러(20)는 소프트웨어 개발자가 FSM 래티스(30) 상의 FSM들을 구현하기 위한 이미지들을 생성 가능하게 하는 애플리케이션 프로그래밍 인터페이스(API)를 포함한다. 컴파일러(20)는 소스 코드로 된 정규 표현의 입력 세트를 FSM 래티스(30)를 구성하도록 구성되는 이미지로 변환하는 방법을 제공한다. 컴파일러(20)는 폰 노이만 아키텍처를 갖는 컴퓨터를 위한 명령어에 의해 구현될 수 있다. 이들 명령어는 컴퓨터 상의 프로세서(12)가 컴파일러(20)의 기능을 구현하도록 야기할 수 있다. 예를 들어, 명령어는, 프로세서(12)에 의해 실행될 때, 프로세서(12)로 하여금 프로세서(12)에는 액세스 가능한 소스 코드 상에 블록(112, 114, 116, 118, 120, 122, 124)에서 설명된 바와 같은 액션을 수행하게 할 수 있다.
일례에 있어서, 소스 코드는 심벌 그룹 내 심벌의 패턴을 식별하기 위한 검색 스트링을 기술하고 있다. 검색 스트링을 기술하기 위해, 소스 코드는 복수의 정규 표현(regex)들을 포함할 수 있다. 정규 표현은 심벌 검색 패턴을 기술하기 위한 스트링일 수 있다. 정규 표현은, 프로그래밍 언어, 텍스트 편집기, 네트워크 보안 등과 같이, 다양한 컴퓨터 도메인에서 광범위하게 사용된다. 일례에 있어서, 컴파일러에 의해 지원되는 정규 표현은 구조화되지 않은 데이터의 분석을 위한 기준을 포함한다. 구조화되지 않은 데이터는 자유 형태이고 데이터 내 워드에 적용되는 인덱싱을 갖고 있지 않은 데이터를 포함할 수 있다. 워드는 데이터 내, 인쇄가능한 그리고 인쇄가능하지 않은, 바이트의 어떠한 조합이라도 포함할 수 있다. 일례에 있어서, 컴파일러는 Perl, (예를 들어, Perl 호환가능한 정규 표현(PCRE)), PHP, 자바 및 .NET 언어를 포함하여 정규 표현을 구현하기 위한 다수의 다른 소스 코드 언어를 지원할 수 있다.
블록(112)에서 컴파일러(20)는 관계형 연결된 연산자의 배열을 형성하도록 소스 코드를 파싱할 수 있고, 이 경우 서로 다른 유형의 연산자는 소스 코드에 의해 구현되는 서로 다른 기능(예를 들어, 소스 코드 내 정규 표현에 의해 구현되는 서로 다른 기능)에 대응한다. 소스 코드를 파싱하는 것은 소스 코드의 제네릭 표현을 생성할 수 있다. 일례에 있어서, 제네릭 표현은 구문 트리라고 알려져 있는 트리 그래프의 형태로 소스 코드 내 정규 표현의 인코딩된 표현을 포함한다. 여기에서 설명되는 예들은 배열을 구문 트리("추상 구문 트리"라고도 알려져 있음)라고 지칭하지만, 다른 예에서는, 구체적 구문 트리 또는 다른 배열이 사용될 수 있다.
컴파일러(20)는, 위에서 언급된 바와 같이, 다수 언어의 소스 코드를 지원할 수 있으므로, 파싱은 소스 코드를, 언어에 무관하게, 비-언어 특정 표현, 예를 들어, 구문 트리로 변환한다. 그리하여, 컴파일러(20)에 의한 추가적 프로세싱(블록(114, 116, 118, 120))은 소스 코드의 언어에 무관하게 공통 입력 구조로부터 작동할 수 있다.
위에서 언급된 바와 같이, 구문 트리는 관계형 연결되는 복수의 연산자를 포함한다. 구문 트리는 다수의 다른 유형의 연산자를 포함할 수 있다. 즉, 서로 다른 연산자는 소스 코드 내 정규 표현에 의해 구현되는 서로 다른 기능에 대응할 수 있다.
블록(114)에서, 구문 트리는 오토마톤으로 변환된다. 오토마톤은 FSM의 소프트웨어 모델을 포함하고 따라서 결정론적 또는 비-결정론적으로서 분류될 수 있다. 결정론적 오토마톤은 소정 시간에 단일 실행 경로를 갖는 한편, 비-결정론적 오토마톤은 다수의 동시다발적 실행 경로를 갖는다. 오토마톤은 복수의 상태를 포함한다. 구문 트리를 오토마톤으로 변환하기 위하여, 연산자 및 구문 트리 내 연산자 간 관계는 상태 간 이행을 갖는 상태로 변환된다. 일례에 있어서, 오토마톤은 FSM 래티스(30)의 하드웨어에 일부 기반하여 변환될 수 있다.
일례에 있어서, 오토마톤에 대한 입력 심벌은 알파벳, 숫자(0 내지 9) 및 다른 인쇄가능한 문자의 심벌을 포함한다. 일례에 있어서, 입력 심벌은 0 내지 255 포함적 바이트 값에 의해 표현된다. 일례에 있어서, 오토마톤은 그래프의 노드가 상태 세트에 대응하는 방향 그래프로서 표현될 수 있다. 일례에 있어서, 입력 심벌(α) 상에서 상태(p)로부터 상태(q)로의 이행, 즉, δ(p,α)은 노드(p)로부터 노드(q)로의 방향 연결에 의해 도시된다. 일례에 있어서, 오토마톤의 역은 소정 심벌(α) 상에서의 각각의 이행 p->q이 역으로 동일 심벌 상에서 q->p로 되는 새로운 오토마톤을 산출한다. 역에서는, 시작 상태가 최종 상태로 되고 최종 상태가 시작 상태로 된다. 일례에 있어서, 오토마톤에 의해 인식(예를 들어, 매칭)되는 언어는 오토마톤에 순차적으로 입력될 때 최종 상태에 도달할 모든 가능한 문자 스트링 세트이다. 오토마톤에 의해 인식되는 언어에서의 각각의 스트링은 시작 상태로부터 하나 이상의 최종 상태로의 경로를 트레이싱한다.
블록(116)에서, 오토마톤이 구축된 후에, 오토마톤은, 여러 다른 것 중에서도, 그 복잡성 및 사이즈를 감축하도록 최적화된다. 오토마톤은 리던던트 상태를 조합함으로써 최적화될 수 있다.
블록(118)에서, 최적화된 오토마톤은 넷리스트로 변환된다. 오토마톤을 넷리스트로 변환하는 것은 오토마톤의 각각의 상태를 FSM 래티스(30) 상의 하드웨어 엘리먼트(예를 들어, SME(34, 36), 다른 엘리먼트)에 매핑하고, 하드웨어 엘리먼트 간 접속을 결정한다.
블록(120)에서, 넷리스트는 넷리스트의 각각의 노드에 대응하는 표적 디바이스(예를 들어, SME(34, 36), 특수 목적 엘리먼트(58))의 특정 하드웨어 엘리먼트를 선택하도록 배치된다. 일례에 있어서, 배치는 FSM 래티스(30)에 대한 일반적 입력 및 출력 제약에 기반하여 각각의 특정 하드웨어 엘리먼트를 선택한다.
블록(122)에서, 배치된 넷리스트는 넷리스트에 의해 기술되는 접속을 달성하도록 그 선택된 하드웨어 엘리먼트를 함께 결합하기 위하여 구성가능 스위칭 엘리먼트(예를 들어, 인터-블록 스위칭 엘리먼트(40), 인트라-블록 스위칭 엘리먼트(42) 및 인트라-로우 스위칭 엘리먼트(44))에 대한 설정을 결정하도록 라우팅된다. 일례에 있어서, 구성가능 스위칭 엘리먼트에 대한 설정은 구성가능 스위칭 엘리먼트에 대한 설정, 및 선택된 하드웨어 엘리먼트를 접속하도록 사용될 FSM 래티스(30)의 특정 도체를 결정함으로써 결정된다. 라우팅은 블록(120)에서 배치된 하드웨어 엘리먼트 간 접속의 더 구체적 제한을 고려할 수 있다. 따라서, 라우팅은 FSM 래티스(30) 상의 도체의 실제 제한을 고려하여 적합한 접속을 만들기 위하여 전역적 배치에 의해 결정되는 바와 같이 하드웨어 엘리먼트 중 일부의 위치를 조절할 수 있다.
넷리스트가 배치 및 라우팅되고 나면, 배치 및 라우팅된 넷리스트는 FSM 래티스(30)를 구성하기 위한 복수의 비트로 변환될 수 있다. 복수의 비트는 여기서는 이미지(예를 들어, 2진 이미지)라고 지칭된다.
블록(124)에서, 이미지는 컴파일러(20)에 의해 발행된다. 이미지는 FSM 래티스(30)의 특정 하드웨어 엘리먼트를 구성하기 위한 복수의 비트를 포함한다. 비트는, 프로그래밍된 FSM 래티스(30)가 소스 코드에 의해 기술된 기능성을 갖는 FSM을 구현하게 되도록, 구성가능 스위칭 엘리먼트, 특수 목적 엘리먼트(58) 및 SME(34, 36)의 상태를 구성하도록 FSM 래티스(30) 상으로 로딩될 수 있다. 배치(블록(120)) 및 라우팅(블록(122))은 FSM 래티스(30) 내 특정 위치에서의 특정 하드웨어 엘리먼트를 오토마톤에서의 특정 상태에 매핑할 수 있다. 따라서, 이미지 내 비트는 소망의 기능(들)을 구현하도록 특정 하드웨어 엘리먼트를 구성할 수 있다. 일례에 있어서, 이미지는 머신 코드를 컴퓨터 판독가능 매체에 저장함으로써 발행될 수 있다. 다른 일례에 있어서, 이미지는 디스플레이 디바이스 상에 이미지를 디스플레이함으로써 발행될 수 있다. 또 다른 일례의 예에 있어서, 이미지는 FSM 래티스(30) 상으로 이미지를 로딩하도록 구성하는 디바이스와 같은 또 다른 디바이스에 이미지를 보냄으로써 발행될 수 있다. 또 다른 일례에 있어서, 이미지는 FSM 래티스(예를 들어, FSM 래티스(30)) 상으로 이미지를 로딩함으로써 발행될 수 있다.
일례에 있어서, 이미지는 이미지로부터의 비트 값을 SME(34, 36) 및 다른 하드웨어 엘리먼트에 직접 로딩하는 것에 의해서든 또는 이미지를 하나 이상의 레지스터에 로딩하고 그 후 레지스터로부터의 비트 값을 SME(34, 36) 및 다른 하드웨어 엘리먼트에 쓰는 것에 의해서든 FSM 래티스(30) 상으로 로딩될 수 있다. 일례에 있어서, FSM 래티스(30)의 하드웨어 엘리먼트(예를 들어, SME(34, 36), 특수 목적 엘리먼트(58), 구성가능 스위칭 엘리먼트(40, 42, 44))는 구성하는 디바이스 및/또는 컴퓨터가 하나 이상의 메모리 주소에 이미지를 쓰는 것에 의해 FSM 래티스(30) 상으로 이미지를 로딩할 수 있게 되도록 메모리 매핑된다.
여기서 설명되는 예의 방법은 적어도 일부 머신 또는 컴퓨터-구현될 수 있다. 일부 예는 위 예에서 설명된 바와 같은 방법을 수행하는 전자 디바이스를 구성하도록 연산가능한 명령어로 인코딩되는 컴퓨터-판독가능 매체 또는 머신-판독가능 매체를 포함할 수 있다. 그러한 방법의 구현은 마이크로코드, 어셈블리 언어 코드, 상위-레벨 언어 코드 등과 같은 코드를 포함할 수 있다. 그러한 코드는 다양한 방법을 수행하기 위한 컴퓨터 판독가능 명령어를 포함할 수 있다. 그 코드는 컴퓨터 프로그램 제품의 일부를 형성할 수 있다. 더욱, 코드는 실행 동안 또는 다른 때에 하나 이상의 휘발성 또는 비-휘발성 컴퓨터-판독가능 매체 상에 유형적으로 저장될 수 있다. 이들 컴퓨터-판독가능 매체는, 국한되는 것은 아니지만, 하드 디스크, 착탈식 자기 디스크, 착탈식 광학 디스크(예를 들어, 콤팩트 디스크 및 디지털 비디오 디스크), 자기 카세트, 메모리 카드 또는 스틱, 램(RAM)들, 롬(ROM)들 등을 포함할 수 있다.
이제 도 9를 참조하면, 상태 머신 엔진(14)의 일 실시예(예를 들어, 단일 칩 상의 단일 디바이스)가 도시되어 있다. 앞서 설명된 바와 같이, 상태 머신 엔진(14)은 데이터 버스를 통하여 메모리(16)와 같은 소스로부터 데이터를 수신하도록 구성된다. 도시된 실시예에 있어서, 데이터는 더블 데이터 레이트 쓰리(DDR3) 버스 인터페이스(130)와 같은 버스 인터페이스를 통해 상태 머신 엔진(14)에 보내질 수 있다. DDR3 버스 인터페이스(130)는 1GByte/sec보다 크거나 같은 레이트로 데이터를 교환(예를 들어, 제공 및 수신)할 수 있을 수 있다. 그러한 데이터 교환 레이트는 데이터가 상태 머신 엔진(14)에 의해 분석되는 레이트보다 더 클 수 있다. 인식될 바와 같이, 분석될 데이터의 소스에 의존하여, 버스 인터페이스(130)는, NAND 플래시 인터페이스, 주변 컴포넌트 상호접속(PCI) 인터페이스, 기가비트 미디어 독립 인터페이스(GMII) 등과 같이, 데이터 소스에 그리고 그로부터 상태 머신 엔진(14)에 데이터를 교환하기 위한 어떠한 적합한 버스 인터페이스라도 될 수 있다. 앞서 설명된 바와 같이, 상태 머신 엔진(14)은 데이터를 분석하도록 구성된 하나 이상의 FSM 래티스(30)를 포함한다. 각각의 FSM 래티스(30)는 2개의 하프-래티스로 분할될 수 있다. 도시된 실시예에 있어서, 각각의 하프 래티스는, 래티스(30)가 48K SME를 포함하게 되도록, 24K SME(예를 들어, SME(34, 36))들을 포함할 수 있다. 래티스(30)는 도 2 내지 도 5에 관하여 앞서 설명된 바와 같이 배열된 어떠한 소망 수의 SME라도 포함할 수 있다. 더욱, 하나의 FSM 래티스(30)만이 예시되어 있기는 하지만, 상태 머신 엔진(14)은 앞서 설명된 바와 같이 다수의 FSM 래티스(30)를 포함할 수 있다.
분석될 데이터는 버스 인터페이스(130)에서 수신되고 여러 버퍼 및 버퍼 인터페이스를 통해 FSM 래티스(30)에 제공될 수 있다. 도시된 실시예에 있어서, 데이터 경로는 데이터 버퍼(132), 명령어 버퍼(133), 프로세스 버퍼(134) 및 인터-랭크(IR) 버스 및 프로세스 버퍼 인터페이스(136)를 포함한다. 데이터 버퍼(132)는 분석될 데이터를 수신하고 임시 저장하도록 구성된다. 일 실시예에서는, 2개의 데이터 버퍼(132)(데이터 버퍼(A) 및 데이터 버퍼(B))가 존재한다. 데이터는 2개의 데이터 버퍼(132) 중 하나에 저장될 수 있는 한편, 데이터는, FSM 래티스(30)에 의한 분석을 위해, 다른 데이터 버퍼(132)로부터는 비워지고 있다. 버스 인터페이스(130)는 데이터 버퍼(132)가 가득 찰 때까지 분석될 데이터를 데이터 버퍼(132)에 제공하도록 구성될 수 있다. 데이터 버퍼(132)가 가득 찬 후에, 버스 인터페이스(130)는 다른 목적으로 사용되도록(예를 들어, 데이터 버퍼(132)가 분석될 부가적 데이터를 수신하도록 이용가능할 때까지 데이터 스트림으로부터의 다른 데이터를 제공하도록) 자유롭게 되도록 구성될 수 있다. 도시된 실시예에 있어서, 데이터 버퍼(132)는 각각 32 K 바이트일 수 있는 한편, 다른 실시예에 있어서, 데이터 버퍼(132)는 어느 적합한 사이즈(예를 들어, 4 K 바이트, 8 K 바이트, 16 K 바이트, 64 K 바이트 등)라도 될 수 있다. 명령어 버퍼(133)는, 분석될 데이터에 대응하는 명령어 및 상태 머신 엔진(14)을 구성하는 것에 대응하는 명령어와 같이, 버스 인터페이스(130)를 통하여 프로세서(12)로부터 명령어를 수신하도록 구성된다. IR 버스 및 프로세스 버퍼 인터페이스(136)는 프로세스 버퍼(134)에 데이터를 제공하는 것을 용이하게 할 수 있다. IR 버스 및 프로세스 버퍼 인터페이스(136)는 데이터가 FSM 래티스(30)에 의해 순서대로 프로세싱됨을 보장하도록 사용될 수 있다. IR 버스 및 프로세스 버퍼 인터페이스(136)는 데이터가 올바르게 수신 및 분석되게 되도록 데이터, 타이밍 데이터, 패킹 명령어 등의 교환을 조정할 수 있다. 일반적으로, IR 버스 및 프로세스 버퍼 인터페이스(136)는 디바이스의 랭크 내 다수 디바이스의 사용을 가능하게 한다. 디바이스의 랭크 내 다수 디바이스는 다수 디바이스 전부가 공유된 데이터 전부를 올바른 순서로 수신하게 되도록 데이터를 공유한다. 예를 들어, 다수의 물리적 디바이스(예를 들어, 상태 머신 엔진(14), 칩, 별개 디바이스)는 랭크로 배열될 수 있고 IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여 서로에 데이터를 제공할 수 있다. 본 출원의 목적으로, 용어 "랭크"는 동일 칩 선택에 접속된 상태 머신 엔진(14)의 세트를 지칭한다. 도시된 실시예에 있어서, IR 버스 및 프로세스 버퍼 인터페이스(136)는 8 비트 데이터 버스를 포함할 수 있다.
도시된 실시예에 있어서, 상태 머신 엔진(14)은 또한 상태 머신 엔진(14) 내외로 데이터를 제공하는데 도움을 주기 위해 압축해제기(138) 및 압축기(140)를 포함한다. 인식될 수 있는 바와 같이, 압축기(140) 및 압축해제기(138)는 소프트웨어 및/또는 하드웨어 설계를 단순화하기 위해 동일한 압축 알고리즘을 사용할 수 있다; 그렇지만, 압축기(140) 및 압축해제기(138)는 다른 알고리즘을 사용할 수도 있다. 데이터를 압축함으로써, 버스 인터페이스(130)(예를 들어, DDR3 버스 인터페이스) 이용 시간이 최소화될 수 있다. 본 실시예에 있어서, 압축기(140)는 상태 벡터 데이터, 구성 데이터(예를 들어, 프로그래밍 데이터), 및 FSM 래티스(30)에 의한 분석 후 획득된 매치 결과 데이터를 압축하도록 사용될 수 있다. 일 실시예에 있어서, 압축기(140) 및 압축해제기(138)는 압축기(140) 및 압축해제기(138) 내/외로 흐르는 데이터가 수정되지 않게(예를 들어, 압축되지도 않고 압축해제되지도 않게) 되도록 불가능으로 될 수 있다(예를 들어, 꺼질 수 있다).
압축기(140) 및 압축해제기(138)는 또한 다수의 데이터 세트를 취급하도록 구성될 수 있고 각각의 데이터 세트는 변하는 길이일 수 있다. 압축된 데이터를 "패딩"하고 각각의 압축된 영역이 종료할 때에 관한 표시자를 포함시킴으로써, 압축기(140)는 상태 머신 엔진(14)을 통해 전반적 프로세싱 속도를 개선할 수 있다.
상태 머신 엔진(14)은 상태 벡터 캐시 메모리(142), 상태 벡터 메모리 버퍼(144), 상태 벡터 중간 입력 버퍼(146) 및 상태 벡터 중간 출력 버퍼(148)를 갖는 상태 벡터 시스템(141)을 포함한다. 상태 벡터 시스템(141)은 FSM 래티스(30)의 다수의 상태 벡터를 저장하도록, 상태 머신 엔진(14) 상으로 또는 그로부터 상태 벡터를 이동시키도록, 그리고 상태 벡터를 FSM 래티스(30)에 제공하여 FSM 래티스(30)를 제공된 상태 벡터에 대응하는 상태로 복원하도록 사용될 수 있다. 예를 들어, 각각의 상태 벡터는 상태 벡터 캐시 메모리(142)에 임시 저장될 수 있다. 즉, 각각의 SME(34, 36)의 상태는 상태가 추후 시간에 복원되어 추가적 분석에 사용될 수 있게 되도록 저장될 수 있는 한편, 새로운 데이터 세트(예를 들어, 검색 용어)의 분석을 위해 SME(34, 36)를 자유롭게 할 수 있다. 전형적 캐시처럼, 상태 벡터 캐시 메모리(142)는 예를 들면 여기에서는 FSM 래티스(30)에 의한 신속한 검색 및 사용을 위해 상태 벡터의 저장을 가능하게 한다. 도시된 실시예에 있어서, 상태 벡터 캐시 메모리(142)는 512 상태 벡터까지 저장할 수 있다. 각각의 상태 벡터는 FSM 래티스(30)의 SME(34, 36)의 상태(예를 들어, 활성화됨 또는 활성화되지 않음) 및 카운터(58)의 동적(예를 들어, 현재) 카운트를 포함한다.
인식될 바와 같이, 상태 벡터 데이터는 랭크 내 서로 다른 상태 머신 엔진(14)(예를 들어, 칩) 간 교환될 수 있다. 상태 벡터 데이터는 카운터(58)의 동적 카운트 및 FSM 래티스(30)의 SME(34, 36)의 상태를 동기화하기 위해, 다수의 상태 머신 엔진(14)을 가로질러 동일 기능을 수행하기 위해, 다수의 상태 머신 엔진(14)을 가로질러 결과를 재생하기 위해, 다수의 상태 머신 엔진(14)을 가로질러 결과를 캐스케이딩하기 위해, 다수의 상태 머신 엔진(14)을 통해 캐스케이딩되는 데이터를 분석하도록 사용되는 카운터(58)의 동적 카운트 및 SME(34, 36)의 상태의 이력을 저장하기 위해 등등과 같이 다양한 목적으로 서로 다른 상태 머신 엔진(14) 간 교환될 수 있다. 더욱, 상태 머신 엔진(14) 내에서 상태 벡터 데이터는 상태 벡터를 신속히 복원하도록 사용될 수 있음을 유념해야 한다. 예를 들어, 상태 벡터 데이터는 SME(34, 36)의 상태 및 카운터(58)의 동적 카운트를 (예를 들어, 새로운 검색 용어를 찾기 위해) 초기화된 상태로 복원하도록, SME(34, 36)의 상태 및 카운터(58)의 동적 카운트를 (예를 들어, 이전에 검색된 검색 용어를 찾기 위해) 이전 상태로 복원하도록, 그리고 SME(34, 36)의 상태 및 카운터(58)의 동적 카운트를 (예를 들어, 캐스케이딩 검색에서 검색 용어를 찾기 위해) 캐스케이딩 구성에 대하여 구성되게 변경하도록 사용될 수 있다. 소정 실시예에 있어서, 상태 벡터 데이터는 (예를 들어, 상태 벡터 데이터의 분석, 수정을 적용하도록 상태 벡터 데이터를 재구성, 효율을 개선하도록 상태 벡터 데이터를 재구성을 위해 등등) 상태 벡터 데이터가 프로세서(12)에 제공될 수 있도록 버스 인터페이스(130)에 제공될 수 있다.
예를 들어, 소정 실시예에 있어서, 상태 머신 엔진(14)은 FSM 래티스(30)로부터 외부 디바이스에 캐싱된 상태 벡터 데이터(예를 들어, 상태 벡터 시스템(141)에 의해 저장된 데이터)를 제공할 수 있다. 외부 디바이스는 상태 벡터 데이터를 수신하고, 상태 벡터 데이터를 수정하고, 수정된 상태 벡터 데이터를 FSM 래티스(30)를 복원(예를 들어, 리셋, 초기화)하도록 상태 머신 엔진(14)에 제공할 수 있다. 따라서, 외부 디바이스는 상태 머신 엔진(14)이 소망에 따라 상태를 건너뛸(예를 들어, 점프 어라운드) 수 있도록 상태 벡터 데이터를 수정할 수 있다.
상태 벡터 캐시 메모리(142)는 어떠한 적합한 디바이스로부터라도 상태 벡터 데이터를 수신할 수 있다. 예를 들어, 상태 벡터 캐시 메모리(142)는 FSM 래티스(30), (예를 들어, IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여) 또 다른 FSM 래티스(30), 압축해제기(138) 등으로부터 상태 벡터를 수신할 수 있다. 도시된 실시예에 있어서, 상태 벡터 캐시 메모리(142)는 상태 벡터 메모리 버퍼(144)를 통하여 다른 디바이스로부터 상태 벡터를 수신할 수 있다. 더욱, 상태 벡터 캐시 메모리(142)는 어느 적합한 디바이스에라도 상태 벡터 데이터를 제공할 수 있다. 예를 들어, 상태 벡터 캐시 메모리(142)는 상태 벡터 메모리 버퍼(144), 상태 벡터 중간 입력 버퍼(146) 및 상태 벡터 중간 출력 버퍼(148)에 상태 벡터 데이터를 제공할 수 있다.
상태 벡터 메모리 버퍼(144), 상태 벡터 중간 입력 버퍼(146) 및 상태 벡터 중간 출력 버퍼(148)와 같은 부가적 버퍼가, 상태 머신 엔진(14)을 통해 인터리빙된 패킷을 갖는 별개 데이터 세트를 프로세싱하면서, 상태 벡터의 급속한 검색 및 저장에 부응하도록 상태 벡터 캐시 메모리(142)와 함께 이용될 수 있다. 도시된 실시예에 있어서, 상태 벡터 메모리 버퍼(144), 상태 벡터 중간 입력 버퍼(146) 및 상태 벡터 중간 출력 버퍼(148)의 각각은 하나의 상태 벡터를 임시 저장하도록 구성될 수 있다. 상태 벡터 메모리 버퍼(144)는 어느 적합한 디바이스로부터라도 상태 벡터 데이터를 수신하도록 그리고 어느 적합한 디바이스에라도 상태 벡터 데이터를 제공하도록 사용될 수 있다. 예를 들어, 상태 벡터 메모리 버퍼(144)는 FSM 래티스(30), (예를 들어, IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여) 또 다른 FSM 래티스(30), 압축해제기(138), 및 상태 벡터 캐시 메모리(142)로부터 상태 벡터를 수신하도록 사용될 수 있다. 다른 일례로서, 상태 벡터 메모리 버퍼(144)는 (예를 들어, 다른 FSM 래티스(30)에 대한) IR 버스 및 프로세스 버퍼 인터페이스(136), 압축기(140) 및 상태 벡터 캐시 메모리(142)에 상태 벡터 데이터를 제공하도록 사용될 수 있다.
마찬가지로, 상태 벡터 중간 입력 버퍼(146)는 어느 적합한 디바이스로부터라도 상태 벡터 데이터를 수신하도록 그리고 어느 적합한 디바이스에라도 상태 벡터 데이터를 제공하도록 사용될 수 있다. 예를 들어, 상태 벡터 중간 입력 버퍼(146)는 (예를 들어, IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여) FSM 래티스(30), 압축해제기(138), 및 상태 벡터 캐시 메모리(142)로부터 상태 벡터를 수신하도록 사용될 수 있다. 다른 일례로서, 상태 벡터 중간 입력 버퍼(146)는 FSM 래티스(30)에 상태 벡터 데이터를 제공하도록 사용될 수 있다. 더욱, 상태 벡터 중간 출력 버퍼(148)는 어느 적합한 디바이스로부터라도 상태 벡터를 수신하도록 그리고 어느 적합한 디바이스에라도 상태 벡터를 제공하도록 사용될 수 있다. 예를 들어, 상태 벡터 중간 출력 버퍼(148)는 FSM 래티스(30) 및 상태 벡터 캐시 메모리(142)로부터 상태 벡터를 수신하도록 사용될 수 있다. 다른 일례로서, 상태 벡터 중간 출력 버퍼(148)는 (예를 들어, IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여) FSM 래티스(30) 및 압축기(140)에 상태 벡터를 제공하도록 사용될 수 있다.
관심 결과가 FSM 래티스(30)에 의해 산출되고 나면, 매치 결과가 매치 결과 메모리(150)에 저장될 수 있다. 예를 들어, 매치(예를 들어, 관심 패턴의 검출)를 나타내는 "매치 벡터"가 매치 결과 메모리(150)에 저장될 수 있다. 그 후 매치 결과는, 예를 들어, 버스 인터페이스(130)를 통하여 프로세서(12)로의 송신을 위해 매치 버퍼(152)에 보내질 수 있다. 앞서 설명된 바와 같이, 매치 결과는 압축될 수 있다.
부가적 레지스터 및 버퍼가 상태 머신 엔진(14)에 역시 제공될 수 있다. 예를 들면, 상태 머신 엔진(14)은 제어 및 상태 레지스터(154)를 포함할 수 있다. 부가적으로, FSM 래티스(30)의 SME(34, 36)를 처음에 구성하거나, 또는 분석 동안 FSM 래티스(30) 내 SME(34, 36)의 상태를 복원하는데 사용하기 위해 복원 및 프로그램 버퍼(156)가 제공될 수 있다. 유사하게, 저장 및 복구 맵 버퍼(158)가 또한 셋업 및 용례를 위한 저장 및 복구 맵의 저장을 위해 제공될 수 있다.
도 10은 디바이스의 랭크로 배열된 다수의 물리적 상태 머신 엔진(14)의 일례를 도시하고 있다. 인식될 수 있는 바와 같이, 상태 머신 엔진(14)과 프로세서(12) 간 인터페이스(예를 들어, DDR3 버스 인터페이스(130))는 상태 머신 엔진(14)이 프로세서(12)로부터의 데이터 라인 전부를 사용하여 프로세서(12)로부터 데이터를 수신 가능하게 할 수 있다. 예를 들어, 프로세서(12)가 64개의 데이터 라인을 갖고 각각의 상태 머신 엔진(14)이 8개의 데이터 라인을 가지면, 8개의 상태 머신 엔진(14)은 프로세서(12)의 데이터 라인 전부로부터 데이터를 수신하도록 64개의 데이터 라인에 결합될 수 있다. 따라서, 프로세서(12)는 표준 인터페이스를 사용하여 그리고 신속히 데이터를 상태 머신 엔진(14)에 제공할 수 있다. 더욱, 상태 머신 엔진(14)은 상태 머신 엔진(14)에 의해 일괄적으로 수신된 데이터 전부가 정연한 방식으로 상태 머신 엔진(14) 전부에 제공되게 되도록 함께 조정하도록 구성될 수 있다.
앞서 설명된 바와 같이, 분석될 데이터는 버스 인터페이스(130)에서 수신된다. 버스 인터페이스(130)는 데이터 버퍼(132) 및 명령어 버퍼(133)를 포함하는 각각의 상태 머신 엔진(14)(예를 들어, F0, F1, F2, F3, F4, F5, F6, F7)의 데이터 버퍼 시스템(159)으로 데이터를 지향시킨다. 데이터 버퍼(132)는 분석될 데이터를 수신하고 임시 저장하도록 구성된다. 도시된 실시예에서는, 각각의 상태 머신 엔진(14)에 2개의 데이터 버퍼(132)(예를 들어, 데이터 버퍼(A) 및 데이터 버퍼(B))가 존재한다. 데이터는 2개의 데이터 버퍼(132) 중 하나에 저장될 수 있는 한편, 데이터는, FSM 래티스(30)에 의한 분석을 위해, 다른 데이터 버퍼(132)로부터는 비워지고 있다. 앞서 논의된 바와 같이, 명령어 버퍼(133)는, 분석될 데이터에 대응하는 명령어와 같이, 버스 인터페이스(130)를 통하여 프로세서(12)로부터 명령어를 수신하도록 구성된다. 데이터 버퍼 시스템(159)으로부터, 분석될 데이터 및 데이터에 대응하는 명령어는 IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여 FSM 래티스(30) 중 하나 이상에 제공된다. 본 실시예에 있어서, 물리적 FSM 래티스(30)는 논리 그룹으로 배열된다. 구체적으로, 상태 머신 엔진(14)(F0, F1)의 FSM 래티스(30)는 논리 그룹(A)(162)으로 배열되고, 상태 머신 엔진(14)(F2, F3)의 FSM 래티스(30)는 논리 그룹(B)(164)으로 배열되고, 상태 머신 엔진(14)(F4, F5)의 FSM 래티스(30)는 논리 그룹(C)(166)으로 배열되고, 상태 머신 엔진(14)(F6, F7)의 FSM 래티스(30)는 논리 그룹(D)(168)으로 배열된다. 다른 실시예에 있어서, 물리적 FSM 래티스(30)는 어느 적합한 수(예를 들어, 1, 2, 3, 4, 5, 6, 7, 8)의 논리 그룹으로라도 배열된다. 더욱, 인식될 바와 같이, 데이터는 IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여 상태 머신 엔진(14) 간에 교환될 수 있다. 예를 들어, IR 버스 및 프로세스 버퍼 인터페이스(136)는 상태 머신 엔진(14)(예를 들어, F0, F1, F2, F3, F4, F5, F6, F7) 중 어느 것 간에라도 데이터를 교환하도록 사용될 수 있다. 8개의 상태 머신 엔진(14)이 예시되고 있기는 하지만, 디바이스의 랭크는 어느 적합한 수(예를 들어, 1, 2, 4, 8 등)의 상태 머신 엔진(14)이라도 가질 수 있다. 인식될 바와 같이, 각각의 상태 머신 엔진(14)의 IR 버스 및 프로세스 버퍼 인터페이스(136)는 (예를 들어, 그 자신의 데이터 버퍼 시스템(159)으로부터 그리고 다른 상태 머신 엔진(14)의 IR 버스 및 프로세스 버퍼 인터페이스(136)로부터) 데이터를 수신하기 위한 입력부를 포함할 수 있다. 마찬가지로, 각각의 상태 머신 엔진(14)의 IR 버스 및 프로세스 버퍼 인터페이스(136)는 (예를 들어, FSM 래티스(30)에 그리고 다른 상태 머신 엔진(14)의 IR 버스 및 프로세스 버퍼 인터페이스(136)에) 데이터를 보내기 위한 출력부를 포함할 수 있다.
버스 인터페이스(130)는 데이터의 효율적 사용을 위해 맞춰지는 포맷으로 분석될 데이터를 수신할 수 있다. 구체적으로, 도 11 내지 도 14는 버스 인터페이스(130)를 통하여 상태 머신 엔진(14)에 제공되는 데이터 블록으로 데이터가 프로세서(12)에 의해 어떻게 배정(예를 들어, 그룹화)될 수 있는지의 예를 도시하고 있다.
이제 도 11을 참조하면, 상태 머신 엔진(14)에 제공될 데이터 블록으로 프로세서(12)에 의해 배정되는 데이터 세그먼트(예를 들어, 데이터 세트, 검색 용어)의 일례가 도시되어 있다. 본 실시예에서는, 다수의 데이터 세그먼트가 단일 데이터 블록으로 배정된다. 각각의 데이터 블록은 (예를 들어, 상태 머신 엔진(14)의 랭크 내 하나 이상의 상태 머신 엔진(14) 상의) FSM 래티스(30)의 단일 논리 그룹(예를 들어, 162, 164, 166, 168)에 의해 분석되도록 배정된다. 예를 들어, 데이터 스트림(170)(예를 들어, 프로세서(12)에 의해 상태 머신 엔진(14)에 보내질 다량의 데이터)은 프로세서(12)에 의해: 논리 그룹(A)(162)을 위해 의도된 데이터에 대응하는 제1 데이터 블록(172), 논리 그룹(B)(164)을 위해 의도된 데이터에 대응하는 제2 데이터 블록(174), 논리 그룹(C)(166)을 위해 의도된 데이터에 대응하는 제3 데이터 블록(176), 및 논리 그룹(D)(168)을 위해 의도된 데이터에 대응하는 제4 데이터 블록(178) 내 배정된다. 구체적으로, 데이터 스트림(170)은 프로세서(12)에 의해 데이터 세그먼트(180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200)로부터 어셈블링된다. 인식될 바와 같이, 데이터 세그먼트(180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200)의 각각은 FSM 래티스(30)에 의해 분석될 데이터 세트를 표현할 수 있다. 인식될 바와 같이, 프로세서(12)는 어느 적합한 이유로라도 데이터 세그먼트(180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200)를 데이터 블록(172, 174, 176, 178)에 배정할 수 있다. 예를 들어, 프로세서(12)는 데이터 세트를 효율적으로 프로세싱하기 위하여 데이터 세트가 분석되게 되는 순서 및/또는 각각의 데이터 세트의 길이에 기반하여 소정 데이터 블록에 데이터 세그먼트를 배정할 수 있다.
데이터 세그먼트(180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200)는 어느 적합한 방식으로라도 데이터 블록(172, 174, 176, 178) 내 배정될 수 있다. 예를 들어, 데이터 세그먼트(180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200)는 데이터 블록(172, 174, 176, 178) 내 바이트 수가 최소화되도록 데이터 블록(172, 174, 176, 178) 내 배정될 수 있다. 다른 일례로서, 데이터 세그먼트(180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200)는 소정 데이터 세그먼트가 함께 그룹화되도록 데이터 블록(172, 174, 176, 178) 내 배정될 수 있다.
예시된 바와 같이, 제1 데이터 블록(172)은 데이터 세그먼트(A)(180), 데이터 세그먼트(F)(190) 및 데이터 세그먼트(I)(196)를 포함한다. 제2 데이터 블록(174)은 데이터 세그먼트(B)(182) 및 데이터 세그먼트(K)(200)를 포함한다. 더욱, 제3 데이터 블록(176)은 데이터 세그먼트(C)(184), 데이터 세그먼트(E)(188) 및 데이터 세그먼트(G)(192)를 포함한다. 제4 데이터 블록(178)은 데이터 세그먼트(D)(186), 데이터 세그먼트(H)(194) 및 데이터 세그먼트(J)(198)를 포함한다.
인식될 바와 같이, 데이터 블록을 효율적으로 프로세싱하기 위해, 데이터 블록은 전부 동등한 양의 데이터를 가질 수 있다. 더욱, 데이터 블록 내 데이터 세그먼트는 프로세싱 디바이스가 데이터 세그먼트가 언제 시작 및 정지할지 결정할 수 있도록 데이터 블록 내 예정된 인터벌(예를 들어, 바이트, 워드)로 시작 및/또는 정지할 수 있다. 그렇지만, 데이터 세그먼트는 예정된 인터벌로 시작 및/또는 정지하도록 올바른 양의 데이터를 가지지 않을 수 있다. 따라서, 데이터가 예정된 인터벌로 데이터 블록 내에서 시작 및/또는 정지하도록 데이터 패딩이 소정 데이터 세그먼트 간에 삽입될 수 있다. 부가적으로, 데이터 패딩은 모든 데이터 블록이 동등한 양의 데이터를 갖도록 데이터 블록의 끝에 부가될 수 있다.
이제 도 12를 참조하면, 도 11의 데이터 블록(172, 174, 176, 178)의 데이터 세그먼트 간에 삽입되는 데이터 패딩의 일례가 도시되어 있다. 예를 들어, 제1 데이터 블록(172)에서는, 데이터 패딩(202)이 데이터 세그먼트(A)(180)와 데이터 세그먼트(F)(190) 간에 삽입될 수 있다. 더욱, 데이터 패딩(204)이 데이터 세그먼트(F)(190)와 데이터 세그먼트(I)(196) 간에 삽입될 수 있다. 다른 일례로서, 제2 데이터 블록(174)에서는, 데이터 패딩(206)이 데이터 세그먼트(B)(182)와 데이터 세그먼트(K)(200) 간에 삽입될 수 있다. 제3 데이터 블록(176)에서는, 데이터 패딩(208)이 데이터 세그먼트(C)(184)와 데이터 세그먼트(E)(188) 간에 삽입될 수 있다. 마찬가지로, 데이터 패딩(210)이 데이터 세그먼트(E)(188)와 데이터 세그먼트(G)(192) 간에 삽입될 수 있다. 다른 일례로서, 제4 데이터 블록(178)에서는, 데이터 패딩(212)이 데이터 세그먼트(D)(186)와 데이터 세그먼트(H)(194) 간에 삽입될 수 있다. 부가적으로, 데이터 패딩(214)이 데이터 세그먼트(H)(194)와 데이터 세그먼트(J)(198) 간에 삽입될 수 있다.
데이터 패딩(202, 204, 206, 208, 210, 212, 214)은 분석되기로 되어 있지 않은 어느 적합한 수의 바이트의 데이터(예를 들어, 무효 데이터, 정크 데이터, 필러 데이터, 불용 데이터 등)라도 포함할 수 있다. 일 실시예에 있어서, 데이터 패딩으로서 사용되는 바이트 수는 이전 데이터 세그먼트의 소정 수의 바이트에 부가될 때 전체 워드 경계에 도달하는 바이트 수일 수 있다(즉, 이전 데이터 세그먼트의 바이트 수 더하기 데이터 패딩으로서 사용되는 바이트 수는 전체 워드 경계에 의해 동등하게 나누어 떨어진다). 예를 들어, 데이터 패딩(202)의 바이트 수는 데이터 세그먼트(A)(180)(즉, 이전 데이터 세그먼트)와 데이터 패딩(202)의 조합된 바이트 수가 전체 워드 경계에 의해 동등하게 나누어 떨어지게 되는 것일 수 있다(예를 들어, 나머지 없음). 도시된 실시예에 있어서, 전체 워드 경계는 8 바이트일 수 있다. 다른 실시예에 있어서, 전체 워드 경계는 어느 적합한 수의 바이트 또는 비트라도 될 수 있다. 그와 같이, 도시된 실시예에 있어서, 데이터 세그먼트(A)(180)가 63 바이트의 데이터를 포함하게 되면, 데이터 패딩(202)은 (예를 들어, 64가 8 바이트에 의해 동등하게 나누어 떨어지므로, 데이터 패딩(202)과 데이터 세그먼트(A)(180) 간 조합된 64 바이트의 데이터를 만들도록) 일 바이트의 데이터를 포함할 것이다. 다른 일례로서, 데이터 세그먼트(A)(180)가 (예를 들어, 8에 의해 동등하게 나누어 떨어지지 않는) 60 바이트의 데이터를 포함하면, 데이터 패딩(202)은 4 바이트의 데이터를 포함할 것이다. 또 다른 일례로서, 데이터 세그먼트(A)(180)가 64 바이트의 데이터를 포함하면, 데이터 패딩(202)은 영 바이트의 데이터를 포함할 것이거나, 또는 환언하면 데이터 패딩(202)이 데이터 세그먼트(A)(180)와 데이터 세그먼트(F)(190) 간에는 필요로 되지 않을 것이다. 인식될 바와 같이, 각각의 데이터 패딩(202, 204, 206, 208, 210, 212, 214)은 유사한 방식으로 연산할 것이다.
이제 도 13을 보면, 도 12의 데이터 블록(172, 174, 176, 178)의 데이터 세그먼트 후에 삽입되는 데이터 패딩의 일례가 도시되어 있다. 구체적으로, 데이터 패딩은 각각의 데이터 블록(172, 174, 176, 178) 내 바이트 수를 동등하게 만들 필요가 있을 때 각각의 데이터 블록(172, 174, 176, 178)의 끝에 삽입될 수 있다. 더욱, 각각의 데이터 블록(172, 174, 176, 178)의 끝에서의 데이터 패딩은 각각의 데이터 블록(172, 174, 176, 178)이 앞서 설명된 바와 같이 전체 워드 경계에 도달하도록 사용될 수 있다. 도시된 실시예에 있어서, 데이터 패딩(216)은 데이터 세그먼트(I)(196) 후에 삽입되고, 데이터 패딩(218)은 데이터 세그먼트(G)(192) 후에 삽입되고, 데이터 패딩(220)은 데이터 세그먼트(J)(198) 후에 삽입된다. 따라서, 데이터 블록(172, 174, 176, 178)의 각각은 동등한 수의 바이트를 포함하고, 데이터 블록(172, 174, 176, 178)의 각각은 전체 워드 경계에 도달한다.
FSM 래티스(30)가 유효 데이터와 데이터 패딩을 구별하는 것은 어려울 수 있다. 따라서, 데이터 패딩이 유효 데이터의 분석 동안 FSM 래티스(30)에 의해 식별 및 무시될 수 있도록 명령어가 데이터 블록(172, 174, 176, 178)에 수반될 수 있다. 그러한 명령어는 버스 인터페이스(130)를 통하여 프로세서(12)에 의해 상태 머신 엔진(14)에 보내질 수 있고 상태 머신 엔진(14)의 명령어 버퍼(160)에 의해 수신, 저장 및 제공될 수 있다. 명령어를 산출하기 위해, 프로세서(12)는 논리적으로 데이터 스트림(170)을 영역(222, 224, 226, 228, 230, 232, 234, 236)으로 분할할 수 있다. 영역(222, 224, 226, 228, 230, 232, 234, 236)의 끝 경계는 어느 데이터 패딩이 끝날 때 각각의 영역이 끝나게 되도록 형성될 수 있다. 예를 들어, 데이터 패딩(208)이 끝날 때 제1 영역(222)은 끝난다. 다른 일례로서, 데이터 패딩(204)이 끝날 때 제5 영역(230)은 끝난다.
데이터 블록(172, 174, 176, 178)에 수반되는 명령어는 각각의 영역(222, 224, 226, 228, 230, 232, 234, 236)에 대한 총 바이트 수 및 각각의 영역 내 각각의 데이터 블록(172, 174, 176, 178)에 대한 유효 바이트 수(예를 들어, 패딩 바이트를 배제한 바이트 수)를 포함할 수 있다. 예를 들어, 명령어는: 제1 영역(222)에 대응하는 바이트 수(238), 제1 영역(222) 내 제1 데이터 블록(172)에 대한 유효 바이트에 대응하는 바이트 수(240), 제1 영역(222) 내 제2 데이터 블록(174)에 대한 유효 바이트에 대응하는 바이트 수(242), 제1 영역(222) 내 제3 데이터 블록(176)에 대한 유효 바이트에 대응하는 바이트 수(244), 및 제1 영역(222) 내 제4 데이터 블록(178)에 대한 유효 바이트에 대응하는 바이트 수(246)를 포함할 수 있다. 이 예에서는, 데이터 세그먼트(A1, B1, D1)에 패딩이 뒤따르지 않기 때문에 (238, 240, 242, 246)에 의해 표현되는 바이트 수는 동등함을 유념하라.
마찬가지로, 명령어는: 제2 영역(224)에 대응하는 바이트 수(248, 250, 252, 254, 256), 제3 영역(226)에 대응하는 바이트 수(258, 260, 262, 264, 266), 제4 영역(228)에 대응하는 바이트 수(268, 270, 272, 274, 276), 제5 영역(230)에 대응하는 바이트 수(278, 280, 282, 284, 286), 제6 영역(232)에 대응하는 바이트 수(288, 290, 292, 294, 296), 제7 영역(234)에 대응하는 바이트 수(298, 300, 302, 304, 306), 및 제8 영역(236)에 대응하는 바이트 수(308, 310, 312, 314, 316)를 포함할 수 있다. 명령어는 각각의 영역(222, 224, 226, 228, 230, 232, 234, 236) 내 각각의 데이터 세그먼트에 대한 유효 바이트 수를 포함할 수 있음을 유념해야 한다. 그래서, 제7 영역(234)에 대해, 논리 그룹(A)(162)은 영의 유효 바이트 수(300)를 포함할 수 있다. 더욱, 제8 영역(236)에 대해, 논리 그룹(A)(162)은 영의 유효 바이트 수(310)를 포함할 수 있다. 따라서, 명령어를 사용하여, FSM 래티스(30)는 데이터 세그먼트와 삽입된 데이터 패딩을 식별할 수 있다. 하나의 특정 유형의 명령어가 여기에 제시되었기는 하지만, 데이터 블록(172, 174, 176, 178)의 그룹과 포함되는 명령어는 FSM 래티스(30)가 데이터 패딩(즉, 무효 데이터)과 유효 데이터를 구별할 수 있게 하는 어느 적합한 명령어 그룹이라도 될 수 있다.
이제 도 14를 참조하면, 상태 머신 엔진(14)의 데이터 버퍼 시스템(159)으로의 송신을 위해 프로세서(12)에 의해 조직되는 도 13의 데이터 블록(172, 174, 176, 178)의 일례가 도시되어 있다. 데이터 블록(172, 174, 176, 178)의 각각은 전체 워드 길이와 등가인 바이트 수(318)를 갖는 데이터의 로우로 배열된다. 도시된 실시예에 있어서, 전체 워드 길이는 상태 머신 엔진(14)의 각각에 대한 바이트(예를 들어, F0, F1, F2, F3, F4, F5, F6, F7)에 의해 표현된 8 바이트이다. 데이터 세그먼트(A)(180)에 대한 제1 바이트가 칼럼 F0에 있고 데이터 세그먼트(A)(180)에 대한 제8 바이트가 칼럼 F7에 있게 되도록 데이터 세그먼트의 각각으로부터의 제1 바이트는 각각의 데이터 블록(172, 174, 176, 178)의 우측에서 시작하고 각각의 데이터 블록의 좌측으로 향하여 증가한다. 인식될 바와 같이, 칼럼 F0은 F0 상태 머신 엔진(14)의 데이터 버퍼(132)에 처음 저장될 데이터를 표현하고, 칼럼 F1은 F1 상태 머신 엔진(14)의 데이터 버퍼(132)에 처음 저장될 데이터를 표현하고 등이다. 더욱, 데이터 세그먼트는 로우에서 상부로부터 저부로 배치된다. 예시된 바와 같이, 데이터 세그먼트와 데이터 패딩의 각각의 조합은 칼럼 F7에서 끝난다(즉, 그것들은 각각 전체 워드 길이로 확장한다). 더욱, 각각의 데이터 블록(172, 174, 176, 178)은 사이즈가 동등하다. 인식될 바와 같이, 연산 동안 데이터 블록(172, 174, 176, 178)은 프로세서(12)로부터 상태 머신 엔진(14)으로 순차적으로 제공될 수 있다.
주어진 블록(172, 174, 176, 178)의 데이터는 대응하는 논리 그룹(각각, 162, 164, 166 또는 168)을 위해 의도된 데이터가 랭크의 상태 머신 엔진(14)의 데이터 버퍼 시스템(159)을 가로질러 분산되도록 디바이스의 랭크 내 상태 머신 엔진(14) 전부의 데이터 버퍼 시스템(159)에 제공되고 가로질러 저장된다. 데이터는 데이터가 버스 인터페이스(130)를 통하여 데이터 버퍼 시스템(159)에 신속히 제공될 수 있게 하는 방식으로 수신 및 저장될 수 있다. 소정 실시예에 있어서, 데이터 버퍼 시스템(159)의 데이터 버퍼(132)는 (예를 들어, 예정된 인터벌로) 버스 인터페이스(130)로부터의 데이터를 래칭하도록 구성될 수 있다. 다른 실시예에 있어서, 데이터 버퍼 시스템(159)의 데이터 버퍼(132)는 데이터 버퍼(132)와 버스 인터페이스(130) 간 접속에 기반하여 한정된 부분의 데이터를 수신할 수 있다. 아래에 상세히 설명되는 바와 같이, 데이터 버퍼 시스템(159)에 저장된 데이터는 데이터가 IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여 데이터 버퍼 시스템(159)으로부터 프로세스 버퍼(134)에 제공될 때 선별된다.
도 15는 IR 버스 및 프로세스 버퍼 인터페이스(136)에 의해 함께 결합되고 디바이스의 랭크로 배열되는 다수의 물리적 상태 머신 엔진(14)의 일례를 도시하고 있다. 구체적으로, 도시된 실시예에서는, 8개의 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)이 모듈(340)을 형성하도록 단일 인쇄 회로 기판 상에 배열된다. 소정 실시예에 있어서, 모듈(340)은 듀얼 인-라인 메모리 모듈(DIMM)에 유사하게 배열될 수 있다. 예를 들어, 단일 칩이 하나의 상태 머신 엔진(14)을 포함할 수 있다. 더욱, 하나의 상태 머신 엔진(14)을 각각 갖는 다수의 칩이 모듈(340)의 인쇄 회로 기판에 결합(예를 들어, 전기적으로, 광학적으로, 또는 아니면 동작가능하게 결합)될 수 있다. 예를 들어, 인쇄 회로 기판은 하나의 상태 머신 엔진(14)을 각각 포함하는 1, 2, 4, 8, 16 또는 그 이상의 칩을 포함할 수 있다. 더욱, 소정 실시예에 있어서, 모듈(340)은 모듈(340)을 컴퓨터, 워크스테이션 또는 서버와 같은 시스템에 결합시키도록 72, 100, 144, 168, 184, 200, 240 또는 더 적거나 더 많은 핀 또는 접속 엘리먼트를 포함할 수 있다. 예를 들어, 모듈(340)은 240개의 핀을 포함할 수 있고 서버 내 슬롯에 삽입되도록 구성될 수 있다.
모듈(340)의 핀은 프로세서(12)와 모듈(340) 간 데이터 전송을 용이하게 하도록 DDR3 버스 인터페이스(130)에 결합된다. 더욱, 모듈(340)의 핀은 인쇄 회로 기판의 라우팅 라인을 사용하여 상태 머신 엔진(14)을 갖는 칩(예를 들어, F0, F1, F2, F3, F4, F5, F6, F7)의 핀에 결합된다. DDR3 버스 인터페이스(130)는 프로세서(12)가 각각의 상태 머신 엔진(14)의 데이터 버퍼 시스템(159)의 메모리 주소를 선택 가능하게 하도록 DDR3 주소 버스(342)를 포함한다. 예시된 바와 같이, DDR3 주소 버스(342)는 16개의 주소 라인을 포함한다; 그렇지만, 다른 실시예에서는, DDR3 주소 버스(342)가 16개보다 더 적거나 더 많은 주소 라인을 포함할 수 있다. DDR3 주소 버스(342)의 각각의 주소 라인은 각각의 상태 머신 엔진(14)의 데이터 버퍼 시스템(159)에 결합된다. 따라서, 프로세서(12)는 함께 각각의 상태 머신 엔진(14)의 데이터 버퍼 시스템(159)의 주소를 선택할 수 있다.
인식될 수 있는 바와 같이, 상태 머신 엔진(14)과 프로세서(12) 간 DDR3 버스 인터페이스(130)는 상태 머신 엔진(14)이 프로세서(12)로부터의 데이터 라인 전부를 사용하여 프로세서(12)로부터 데이터를 수신 가능하게 할 수 있다. 예를 들어, 프로세서(12)가 64개의 데이터 라인을 갖고 각각의 상태 머신 엔진(14)이 8개의 데이터 라인을 가지면, 8개의 상태 머신 엔진(14)은 프로세서(12)의 데이터 라인 전부로부터 데이터를 수신하도록 64개의 데이터 라인에 결합될 수 있다. 따라서, 프로세서(12)는 표준 인터페이스를 사용하여 그리고 신속히 데이터를 상태 머신 엔진(14)에 제공할 수 있다. 더욱, 상태 머신 엔진(14)은 상태 머신 엔진(14)에 의해 일괄적으로 수신된 데이터 전부가 정연한 방식으로 상태 머신 엔진(14) 전부에 제공되게 되도록 함께 조정하도록 구성될 수 있다. 도시된 실시예에 있어서, DDR3 버스 인터페이스(130)는 각각의 상태 머신 엔진(14)에 결합된 데이터 라인(344, 346, 348, 350, 352, 354, 356, 358) 세트를 갖는 데이터 버스(343)를 포함한다. 예시된 바와 같이, 별개 데이터 라인이 각각의 상태 머신 엔진(14)에 결합된다. 예를 들어, 소정 실시예에 있어서, 데이터 버스(343)는 64개의 데이터 라인을 포함하고 모듈(340)은 8개의 상태 머신 엔진(14)을 포함한다. 그러한 일례에 있어서, 8개의 데이터 라인은 8개의 상태 머신 엔진(14)의 각각에 결합되고 그리고/또는 그에게만 전용일 수 있다. 따라서, 데이터 버스(343) 및 DDR3 주소 버스(342)를 사용하여, 데이터의 각각의 바이트는 각각의 상태 머신 엔진(14)의 데이터 버퍼 시스템(159)의 선택된 주소에 동기식으로 제공될 수 있다. 소정 실시예에서는, 8개보다 더 적거나 더 많은 데이터 라인이 상태 머신 엔진(14)을 데이터 버스(343)에 결합시킬 수 있다. 더욱, DDR3 버스 인터페이스(130)는 64개보다 더 적거나 더 많은 데이터 라인을 포함할 수 있다. 이하의 표, 표 1은 특정된 수의 데이터 라인을 갖는 DDR3 버스 인터페이스(130), 및 상태 머신 엔진(14)에 결합되는 DDR3 버스 인터페이스(130)의 소정 수의 데이터 라인의 구성의 다양한 예를 예시하고 있다.
표 1에 예시된 바와 같이, 데이터 버스(343)가 8개의 데이터 라인을 포함하면, 8개의 데이터 라인은 8개 라인의 입력 데이터 버스 폭을 갖는 하나의 상태 머신 엔진(14)에 결합될 수 있다. 다른 일례로서, 데이터 버스(343)가 16개의 데이터 라인을 포함하면, 16개의 데이터 라인은 8개 라인의 입력 데이터 버스 폭을 갖는 2개의 상태 머신 엔진(14), 또는 16개 라인의 입력 데이터 버스 폭을 갖는 하나의 상태 머신 엔진(14)에 결합될 수 있다. 추가적 일례로서, 데이터 버스(343)가 32개의 데이터 라인을 포함하면, 32개의 데이터 라인은 8개 라인의 입력 데이터 버스 폭을 갖는 4개의 상태 머신 엔진(14), 또는 16개 라인의 입력 데이터 버스 폭을 갖는 2개의 상태 머신 엔진(14)에 결합될 수 있다. 더욱, 데이터 버스(343)가 64개의 데이터 라인을 포함하면, 64개의 데이터 라인은 8개 라인의 입력 데이터 버스 폭을 갖는 8개의 상태 머신 엔진(14), 또는 16개 라인의 입력 데이터 버스 폭을 갖는 4개의 상태 머신 엔진(14)에 결합될 수 있다.
DDR3 버스 인터페이스(130)는 프로세서(12)와 모듈(340) 간 데이터 전송을 용이하게 하는 다른 제어 라인(360, 362, 364, 366, 368, 370, 372, 374)을 포함한다. 다른 제어 라인(360, 362, 364, 366, 368, 370, 372, 374)은 프로세서(12)와 선택된 상태 머신 엔진(14) 간 개개의 통신을 가능하게 할 수 있고 그리고/또는 일괄적으로 프로세서(12)와 상태 머신 엔진(14) 간 통신을 가능하게 할 수 있다.
연산 동안, 프로세서(12)는 데이터를 DDR3 버스 인터페이스(130)에 제공할 수 있다. 예를 들어, 프로세서(12)는 64개의 데이터 라인을 갖는 데이터 버스를 사용하여 한 번에 64 비트의 데이터를 제공할 수 있다. 더욱, 상태 머신 엔진(14)은 각각의 상태 머신 엔진(14)에 결합된 8개의 데이터 라인으로부터 8 비트의 데이터를 각각 수신할 수 있다. 따라서, 프로세서(12)는 모듈(340)에 한 번에 64 비트의 데이터를 제공할 수 있다. 앞서 논의된 바와 같이, 상태 머신 엔진(14)은 여러 다른 상태 머신 엔진(14)에 의해 분석될 데이터를 수신하도록 구성될 수 있다. 그와 같이, 프로세서(12)는 데이터 블록으로 모듈(340)에 데이터를 제공할 수 있으며, 각각의 데이터 블록은 모듈(340)의 상태 머신 엔진(14) 중 하나 이상에 의해 프로세싱되도록 의도된다. 환언하면, 프로세서(12)는 그것이 제공하는 데이터 블록을 분류 및/또는 패킹하지 않을 수 있다. 예를 들어, 프로세서(12)는, 데이터의 소정 수의 연이은 바이트 중 일부들이 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)의 각각에 의해 수신 및 저장될 것이라 하더라도, 상태 머신 엔진(14)(F0)에 의해 분석되도록 의도된 데이터의 그 소정 수의 연이은 바이트를 제공할 수 있다. 그리하여, 프로세서(12)는 데이터를 단순화되고 효율적인 방식으로 모듈(340)에 제공할 수 있고, 상태 머신 엔진(14)이 선택된 상태 머신 엔진(14)에 의해 프로세싱될 데이터를 분류 가능하게 할 수 있다.
또한 프로세서(12)는 프로세서(12)로부터 제공된 각각의 데이터 블록을 분석하기로 되어 있는 상태 머신 엔진(14)에 명령하도록 상태 머신 엔진(14)에 명령어를 제공할 수 있고, 소정 시간 기간(예를 들어, 예정된 시간 기간) 동안 데이터를 분석하도록 상태 머신 엔진(14)에 명령어를 제공할 수 있고, 프로세서(12)로부터 제공된 각각의 데이터 블록의 길이에 관하여 상태 머신 엔진(14)에 명령하도록 상태 머신 엔진(14)에 명령어를 제공할 수 있다. 소정 실시예에 있어서, 데이터 버퍼 시스템(159)은 프로세서(12)로부터 수신된 명령어를 저장하도록 소정 메모리 장소를 포함할 수 있다. 따라서, 프로세서(12)는, DDR3 주소 버스(342)를 사용하여, 명령어를 수신하는 것에 전용인 데이터 버퍼 시스템(159)의 예정된 주소를 선택할 수 있다. 그 후 프로세서(12)는 데이터 버스(343) 및 DDR3 주소 버스(342)를 사용하여 상태 머신 엔진(14)의 각각에 명령어를 제공할 수 있다.
IR 버스 및 프로세스 버퍼 인터페이스(136)는 모듈(340)의 일부분이고 상태 머신 엔진(14)을 상호접속시키는 접속부(예를 들어, 전기적, 광학적 또는 다른 동작가능한 접속부)를 포함한다. 예시된 바와 같이, IR 버스 및 프로세스 버퍼 인터페이스(136)는 명령어 버스의 일부분일 수 있는 다른 제어 라인(378) 및 IR 데이터 버스(376)를 포함한다. 도시된 실시예에 있어서, IR 데이터 버스(376)는 상태 머신 엔진(14)의 각각을 서로 결합시키는 8개의 데이터 라인을 포함한다. 구체적으로, IR 데이터 버스(376)는 각각의 상태 머신 엔진(14)의 데이터 버퍼 시스템(159)과, 각각의 상태 머신 엔진(14)의 프로세스 버퍼(134)를 함께 결합시킨다. 더욱, IR 데이터 버스(376)는 프로세서(12)로부터 수신된 데이터를 데이터의 분석을 위해 다른 상태 머신 엔진(14)에 제공하도록 사용될 수 있다. 다른 제어 라인(378)은 상태 머신 엔진(14) 간 데이터 전송을 동기화 및/또는 제어하도록 사용될 수 있다.
상태 머신 엔진(14)을 갖는 각각의 칩은 프로세서(12)로부터 수신된 데이터를 프로세싱하도록 논리 그룹으로 그룹화될 수 있다. 인식될 수 있는 바와 같이, 모듈(340)의 상태 머신 엔진(14)은 하나 이상의 논리 그룹을 포함할 수 있다. 모듈(340)에는, 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7) 전부를 포함하는 하나의 논리 그룹이 있을 수 있다. 더욱, 2개, 3개, 4개, 5개, 6개, 7개 또는 8개 논리 그룹이 있을 수 있다. 논리 그룹은 어떠한 수의 상태 머신 엔진(14)이라도 가질 수 있고, 논리 그룹은 동일한 사이즈이어야 할 필요는 없다. 예를 들어, 일 실시예에 있어서, 제1 논리 그룹은 상태 머신 엔진(14)(F0, F1)을 포함할 수 있고, 제2 논리 그룹은 상태 머신 엔진(14)(F2, F3, F4, F5, F6, F7)을 포함할 수 있다. 하나보다 많은 상태 머신 엔진(14)을 포함할 수 있는 논리 그룹을 사용함으로써, 단일 상태 머신 엔진(14)으로 프로그래밍되기에 너무 큰 단일 오토마톤 프로세서 블록은 논리 그룹에 의해 분석될 수 있다. 더욱, 논리 그룹은 다수의 데이터 블록이 구별되는 논리 그룹에 의해 동시다발적으로 분석될 수 있게 한다. 더욱, 논리 그룹은, 동일한 사이즈를 갖는 논리 그룹을 사용함으로써 그리고/또는 병렬 프로세싱에 의해서와 같이, 데이터가 높은 처리율 속도로 분석될 수 있게 한다. 그리하여, 모듈(340)의 아키텍처는 융통성을 제공하고 모듈(340)의 단일 상태 머신 엔진(14)이 1.0 Gbps 이상으로까지의 레이트로 데이터를 프로세싱 가능하게 할 수 있다. 더욱, 모듈(340)의 아키텍처는, 8개의 상태 머신 엔진(14)을 사용함으로써와 같이, 모듈(340)이 8개의 논리 그룹에서 병렬로 데이터를 프로세싱 가능하게 하여, 그로써 단일 상태 머신 엔진(14)의 레이트의 8배까지의 데이터 프로세싱 레이트(예를 들어, 8.0 Gbps 이상)를 달성할 수 있다.
각각의 상태 머신 엔진(14)이 논리 그룹의 일부분일 수 있다 하더라도, 상태 머신 엔진(14)은 그들이 특정 논리 그룹의 일부분이라는 어느 표시 및/또는 그 논리 그룹의 일부분인 소정 수의 상태 머신 엔진(14)에 대한 어느 표시도 수신하지 않을 수 있다. 그렇지만, 명령어 및/또는 다른 제어 라인(360, 362, 364, 366, 368, 370, 372, 374)을 사용하여 소정 정보가 상태 머신 엔진(14)에 제공될 수 있다. 예를 들어, 상태 머신 엔진(14)은 DDR3 버스 인터페이스(130)의 총 버스 폭, DDR3 버스 인터페이스(130)에 결합된 데이터 라인의 수, IR 데이터 버스(376)의 데이터 라인의 수, DDR3 버스 인터페이스(130) 상의 디바이스 위치, IR 데이터 버스(376) 상의 디바이스 위치, 상태 머신 엔진(14)이 마스터 디바이스인지, 상태 머신 엔진(14)이 슬레이브 디바이스인지, 수행할 IR 데이터 버스(376) 사이클의 수, 수신될 바이트 수, 및/또는 분석될 바이트 수(예를 들어, 유효 데이터)에 대한 표시를 수신 및/또는 저장할 수 있다.
예를 들어, 모듈(340)의 초기화 동안, 프로세서(12)는 각각의 상태 머신 엔진(14)에 번호(예를 들어, 0, 1, 2, 3, 4, 5, 6, 7)를 배정하도록 각각의 상태 머신 엔진(14)에 데이터를 제공할 수 있다. 소정 실시예에 있어서, "0"을 수신하는 상태 머신 엔진(14)은 상태 머신 엔진(14)(F0)일 수 있고 "마스터" 디바이스일 수 있고, 모든 다른 디바이스는 "슬레이브" 디바이스일 수 있다. 다른 실시예에 있어서, "마스터" 디바이스에는 어느 적합한 값이라도 배정될 수 있다. 소정 실시예에 있어서, "마스터" 디바이스는 상태 머신 엔진(14)의 동기화를 조정하도록 구성될 수 있다. 또한 프로세서(12)는 모듈(340)의 일부분인 상태 머신 엔진(14)의 총 수, 상태 머신 엔진(14)이 속하는 논리 그룹, 및/또는 모듈(340)의 일부분인 논리 그룹의 수를 나타내도록 각각의 상태 머신 엔진(14)에 데이터를 제공할 수 있다.
하나의 논리 그룹을 갖는 일 실시예에 있어서, IR 버스 및 프로세스 버퍼 인터페이스(136)는 랭크 내 각각의 상태 머신 엔진(14)(예를 들어, F0, F1, F2, F3, F4, F5, F6, F7)이 프로세서(12)에 의해 제공된 데이터의 바이트 전부를 분석 가능하게 한다. 따라서, 그러한 일 실시예에 있어서, 데이터 스트림 전체는 상태 머신 엔진(14)의 각각에서 프로세싱될 수 있다. 다수의 논리 그룹을 갖는 다른 일 실시예에 있어서, IR 버스 및 프로세스 버퍼 인터페이스(136)는 랭크 내 각각의 상태 머신 엔진(14)이 데이터-슬라이싱 기법을 구현함으로써 적시 방식으로 데이터 스트림의 배정된 부분을 수신 가능하게 한다. 예를 들어, 프로세서(12)는 각각의 논리 그룹을 위해 의도된 데이터를 순차적으로 제공할 수 있지만, 상태 머신 엔진(14)은 의도된 상태 머신 엔진(14)에 데이터를 효율적으로 제공하기 위해 데이터가 IR 데이터 버스(376)에 제공될 수 있도록 각각의 상태 머신 엔진(14)의 데이터 버퍼 시스템(159)에 오프셋 방식으로 데이터를 저장할 수 있다.
도 16은 다수의 물리적 상태 머신 엔진(14)에 결합된 IR 버스 및 프로세스 버퍼 인터페이스(136)의 일례를 도시하고 있다. 구체적으로, 도시된 실시예는 2개의 논리 그룹(즉, 논리 그룹 0 및 논리 그룹 1)으로 분할된 4개의 상태 머신 엔진(14)을 포함한다. 더욱, 4개의 상태 머신 엔진(14)은 32개의 데이터 라인을 갖는 DDR3 버스 인터페이스(130)에 결합될 수 있다. 위에서 설명된 바와 같이, IR 데이터 버스(376)는 상태 머신 엔진(14)의 각각에 결합된다. 더욱, 다른 제어 라인(378)은 상태 머신 엔진(14)의 각각에 결합되는 랭크 동기화 라인(RSYNC)(380), IR 버스 데이터 유효 라인(IRDV)(382), 제1 IR 버스 데이터 스트로브 라인(IRDQS)(384), 및 제2 IR 버스 데이터 스트로브 라인(IRDQS#)(386)을 포함한다. 상태 머신 엔진(14)의 각각은 RSYNC(380)의 신호를 제어하도록 그리고/또는 그로부터 입력을 수신하도록 구성된다. 예를 들어, 일 실시예에 있어서, "슬레이브" 디바이스 및/또는 "마스터" 디바이스는 RSYNC(380)를 논리 0으로 끌어당김으로써 논리 1로부터 논리 0으로 RSYNC(380)의 신호를 제어하도록 구성될 수 있는 한편, "마스터" 디바이스는 RSYNC(380)로부터 수신된 입력에 기반하여 IRDV(382)의 신호를 제어하도록 구성될 수 있다. 도시된 실시예에 있어서, 상태 머신 엔진(14)(F0)은 "마스터" 디바이스로서 구성되는 한편, 상태 머신 엔진(14)(F1, F2, F3)은 "슬레이브" 디바이스로서 구성된다. 더욱, 상태 머신 엔진(14)(F1, F2, F3)은 RSYNC(380)의 신호를 제어하도록 구성되는 한편, 상태 머신 엔진(14)(F0)은 RSYNC(380)로부터 수신된 입력에 기반하여 IRDV(382)의 신호를 제어하도록 구성된다. 상태 머신 엔진(14)(F0)은 상태 머신 엔진(14)(F1, F2, F3)이 데이터를 수신하는데 전부 이용가능함을 나타내는 제1 표시(예를 들어, 논리 하이)를 수신하도록 구성될 수 있다. 더욱, 상태 머신 엔진(14)(F0)은 상태 머신 엔진(14)(F1, F2, F3) 중 적어도 하나가 데이터를 수신하는데 이용가능하지 않음을 나타내는 제2 표시(예를 들어, 논리 로우)를 수신하도록 구성될 수 있다. 예를 들어, 상태 머신 엔진(14)(F1, F2, F3) 중 어느 하나는 상태 머신 엔진(14)(F1, F2, F3) 중 적어도 하나가 데이터를 수신하는데 이용가능하지 않음을 상태 머신 엔진(14)(F0)에 나타내도록 RSYNC(380)의 신호를 논리 로우로 제어(예를 들어, 논리 로우를 출력)할 수 있다.
부가적으로, 상태 머신 엔진(14)의 각각은 IRDV(382)의 신호를 제어하도록 그리고/또는 그로부터 입력을 수신하도록 구성된다. 예를 들어, 일 실시예에 있어서, "마스터" 디바이스는 IRDV(382)의 신호를 제어하도록 구성될 수 있는 한편, "슬레이브" 디바이스는 IRDV(382)로부터 입력을 수신하도록 구성될 수 있다. 도시된 실시예에 있어서, 상태 머신 엔진(14)(F0)은 IRDV(382)의 신호를 제어하도록 구성되는 한편, 상태 머신 엔진(14)(F1, F2, F3)은 IRDV(382)로부터 입력을 수신하도록 구성된다. 상태 머신 엔진(14)(F0)은 상태 머신 엔진(14)(F1, F2, F3)에 제공된 데이터가 유효함을 나타내는 제1 표시(예를 들어, 논리 하이)로 신호를 제어하도록 구성될 수 있다. 더욱, 상태 머신 엔진(14)(F0)은 상태 머신 엔진(14)(F1, F2, F3)에 제공된 데이터가 유효하지 않음을 나타내는 제2 표시(예를 들어, 논리 로우)로 신호를 제어하도록 구성될 수 있다. 상태 머신 엔진(14)의 각각은 IRDQS(384) 및 IRDQS#(386)으로부터 입력을 수신하도록 그리고 그들에 출력을 제공하도록 구성된다. 더욱, 상태 머신 엔진(14)의 각각은 IRDQS(384) 및/또는 IRDQS#(386)에 데이터를 출력하는 한편 IR 데이터 버스(376)에 데이터를 제공하도록 구성된다.
도 17은 IR 버스 및 프로세스 버퍼 인터페이스(136)의 신호의 타이밍 선도의 일례를 도시하고 있다. 소정 구성에 있어서, RSYNC(380)는 상태 머신 엔진(14)을 동기화하도록 사용될 수 있다. 예를 들어, 상태 머신 엔진(14)의 각각은 상태 머신 엔진(14)이 RSYNC(380)의 신호를 논리 로우로 구동하는(예를 들어, RSYNC(380)를 논리 로우로 "끌어당기는") 디폴트 상태를 포함할 수 있다. 프로세서(12)는 상태 머신 엔진(14)의 동기화를 개시하는 다양한 명령어를 상태 머신 엔진(14)에 제공할 수 있다. 예를 들어, 동기화를 개시하는 명령어는 M_BAR, I_DA.PROCESS, I_DA.PROCESS_EoP, I_DA.PROCESS_EoD, I_DB.PROCESS, I_DB.PROCESS_EoP, 및 I_DB.PROCESS_EoD를 포함할 수 있다. 상태 머신 엔진(14)이 이들 명령어 중 하나에 직면할 때, 상태 머신 엔진(14)은 RSYNC(380)의 신호를 논리 로우로 구동하는 것을 정지하고(예를 들어, RSYNC(380)를 "가게 하고") 그리고 연산을 휴지한다(예를 들어, 명령어 실행을 계속하지 않는다). 상태 머신 엔진(14)은 RSYNC(380)가 논리 하이로 이,이것은 상태 머신 엔진(14) 전부가 RSYNC(380)의 신호를 논리 로우로 구동하는 것을 정지하거나, 또는 RSYNC(380)를 "가게 한" 후에 일어남)하고 그리고/또는 IRDV(382)가 논리 하이로 이행할 때까지 연산을 휴지한다. 상태 머신 엔진(14)이 RSYNC(380) 및/또는 IRDV(382)가 논리 하이임을 검출할 때, 상태 머신 엔진(14)은 동기화를 개시하였던 명령어의 연산을 재개한다. 동기화를 개시하였던 명령어의 완료시, 상태 머신 엔진은 상태 머신 엔진(14)이 RSYNC(380)의 신호를 논리 로우로 구동하는(예를 들어, RSYNC(380)를 논리 로우로 "끌어당기는") 그 디폴트 상태로 복귀할 수 있다.
그러한 연산 동안 교환되는 신호의 일 실시예가 도 17에 도시되어 있다. 예를 들어, 시간(388)에서는, RSYNC(380)가 논리 로우로부터 논리 하이로 이행한다. 그러한 이행은 상태 머신 엔진(14)(F0, F1, F2, F3) 전부가 상태 머신 엔진(14)의 동기화를 개시하는 명령어를 (예를 들어, 프로세서(12)로부터) 수신하였음, 상태 머신 엔진(14)(F0, F1, F2, F3) 전부가 연산을 휴지하였음, 및 상태 머신 엔진(14)(F0, F1, F2, F3) 전부가 논리 로우로 RSYNC(380)의 신호를 구동하는 것을 정지하였음을 나타낸다. 이러한 예에 있어서, 상태 머신 엔진(14)(F0, F1, F2, F3)은 데이터 버퍼 프로세싱 명령어(예를 들어, I_DA.PROCESS, I_DA.PROCESS_EoP, I_DA.PROCESS_EoD, I_DB.PROCESS, I_DB.PROCESS_EoP, 및 I_DB.PROCESS_EoD)에 직면하였다. 시간(390)에서는, RSYNC(380)가 논리 하이로부터 논리 로우로 이행한다. 그러한 이행은 상태 머신 엔진(14)(F0, F1, F2, F3) 중 적어도 하나가 데이터 버퍼 프로세싱 명령어를 완료하였음, 및 상태 머신 엔진(14)(F0, F1, F2, F3) 중 적어도 하나가 논리 로우로 RSYNC(380)의 신호를 끌어당겼음을 나타낸다.
시간(392)에서는, IRDV(382)가 논리 로우로부터 논리 하이로 이행한다. 그러한 이행은, "마스터" 디바이스로 시작하고 랭크 내 각각의 상태 머신 엔진(14)을 통해 순서대로(예를 들어, F0, F1, F2, F3) 계속하여, 유효 데이터가 IR 데이터 버스(376)에 제공되기 시작할 것이라는 "마스터" 상태 머신 엔진(14)(F0)으로부터 상태 머신 엔진(14)(F0, F1, F2, F3) 전부로의 표시이다. 시간(394)에서는, IRDV(382)가 논리 하이로부터 논리 로우로 이행한다. 그러한 이행은 유효 데이터가 IR 데이터 버스(376)에 더 이상 제공되고 있지 않다는 "마스터" 상태 머신 엔진(14)(F0)으로부터 상태 머신 엔진(14)(F0, F1, F2, F3) 전부로의 표시이다.
시간(396)에서, "마스터" 상태 머신 엔진(14)(F0)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 0을 위해 의도된 데이터의 제1 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다. 그 후, 시간(397)에서, "마스터" 상태 머신 엔진(14)(F0)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 1을 위해 의도된 데이터의 제2 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다. 더욱, 시간(398)에서, 상태 머신 엔진(14)(F1)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 0을 위해 의도된 데이터의 제1 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다. 그 후, 시간(399)에서, 상태 머신 엔진(14)(F1)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 1을 위해 의도된 데이터의 제2 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다.
더욱, 시간(400)에서, 상태 머신 엔진(14)(F2)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 0을 위해 의도된 데이터의 제1 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다. 그 후, 시간(401)에서, 상태 머신 엔진(14)(F2)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 1을 위해 의도된 데이터의 제2 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다. 부가적으로, 시간(402)에서, 상태 머신 엔진(14)(F3)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 0을 위해 의도된 데이터의 제1 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다. 그 후, 시간(403)에서, 상태 머신 엔진(14)(F3)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 1을 위해 의도된 데이터의 제2 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다.
따라서, 상태 머신 엔진(14)의 각각은 데이터의 2 바이트의 "버스트 길이"를 갖는 데이터를 제공한다(예를 들어, 각각의 상태 머신 엔진(14)은 랭크 내 다음 상태 머신 엔진(14)이 데이터를 제공하기 전에 데이터의 2 바이트를 출력한다). 도시된 실시예에 있어서, 데이터의 제1 바이트는 제1 논리 그룹(논리 그룹 0)을 위해 의도되고 데이터의 제2 바이트는 제2 논리 그룹(논리 그룹 1)을 위해 의도된다. 인식될 수 있는 바와 같이, "버스트 길이"는 다른 실시예에서는 달라질 수 있다. 예를 들어, "버스트 길이"는 논리 그룹의 수에 기반하거나, 논리 그룹의 수와 동등하거나 등일 수 있다. 데이터가 IR 데이터 버스(376)에 제공될 때 상태 머신 엔진(14)은 데이터를 수신하고 그 상태 머신 엔진(14)을 위해 의도되는 데이터를 저장한다. 예를 들어, 상태 머신 엔진(14)(F0, F1)은 논리 그룹 0의 일부분이기 때문에, 상태 머신 엔진(14)(F0, F1)은 상태 머신 엔진(14)의 각각에 의해 제공되는 모든 제1 바이트를 저장한다. 더욱, 상태 머신 엔진(14)(F2, F3)은 논리 그룹 1의 일부분이기 때문에, 상태 머신 엔진(14)(F2, F3)은 상태 머신 엔진(14)의 각각에 의해 제공되는 모든 제2 바이트를 저장한다. 소정 실시예에 있어서, 상태 머신 엔진(14)의 각각은 IRDQS(384) 및/또는 IRDQS#(386)의 하강 에지에 기반하여 데이터를 저장하도록 구성된다.
도시된 실시예에 있어서, 상태 머신 엔진(14)의 각각은 단 하나의 데이터 버스트만을 제공하였다. 그렇지만, 인식될 수 있는 바와 같이, 데이터 버스트를 제공하는 각각의 상태 머신 엔진(14)의 순환 사이클은 RSYNC(380)가 시간(390)에서 논리 하이로부터 논리 로우로 이행하기 전에 어떠한 횟수라도 반복할 수 있다. 소정 실시예에 있어서, 데이터 버스트를 제공하는 각각의 상태 머신 엔진(14)의 사이클은 프로세서(12)로부터 상태 머신 엔진(14)에 제공된 명령어에 기반하여 반복될 수 있다. 예를 들어, 프로세서(12)는 각각의 상태 머신 엔진(14)이 IR 데이터 버스(376)로부터 저장하기로 되어 있는 바이트 수(CNTC)를 나타내는 명령어를 상태 머신 엔진(14)의 각각에 제공할 수 있다. 따라서, 데이터 버스트를 제공하는 각각의 상태 머신 엔진(14)의 사이클은 CNTC 수와 동등한 횟수 반복될 수 있다. 소정 실시예에 있어서, CNTC 수는 논리 그룹에 제공될 가장 긴 데이터 그룹의 길이와 동등할 수 있고, 그로써 각각의 논리 그룹이 그 의도된 데이터를 수신하기에 충분한 사이클을 가능하게 한다. 더욱, 프로세서(12)는 각각의 상태 머신 엔진(14)이 분석하기로 되어 있는 바이트 수(CNTV)를 나타내는 명령어를 상태 머신 엔진(14)의 각각에 제공할 수 있다. 소정 실시예에 있어서, CNTC 수가 CNTV 수보다 더 크면, 상태 머신 엔진(14)은 CNTV 수 후에 CNTC 수까지 수신된 바이트를 무효 데이터(예를 들어, 정크 데이터, 불용 데이터 등)라고 생각할 수 있다.
시간(404)에서는, RSYNC(380)가 논리 로우로부터 논리 하이로 이행한다. 그러한 이행은 상태 머신 엔진(14)(F0, F1, F2, F3) 전부가 상태 머신 엔진(14)의 동기화를 개시하는 명령어를 (예를 들어, 프로세서(12)로부터) 수신하였음, 상태 머신 엔진(14)(F0, F1, F2, F3) 전부가 연산을 휴지하였음, 및 상태 머신 엔진(14)(F0, F1, F2, F3) 전부가 논리 로우로 RSYNC(380)의 신호를 구동하는 것을 정지하였음을 나타낸다. 이러한 예에서, 상태 머신 엔진(14)(F0, F1, F2, F3)은 M_BAR 명령어에 직면하였다. M_BAR 명령어는 부가적 명령어가 상태 머신 엔진(14)에 의해 실행되기 전에 상태 머신 엔진(14)을 동기화하도록 사용된다. 시간(405)에서는, RSYNC(380)가 논리 하이로부터 논리 로우로 이행한다. 그러한 이행은 상태 머신 엔진(14)(F0, F1, F2, F3) 중 적어도 하나가 논리 로우로 RSYNC(380)를 끌어당겼음, 및 상태 머신 엔진(14)이 동기화되고 부가적 명령어를 실행하는 것으로 진행할 수 있음을 나타낸다.
시간(406)에서는, RSYNC(380)가 논리 로우로부터 논리 하이로 이행한다. 이러한 예에 있어서, 상태 머신 엔진(14)(F0, F1, F2, F3)은 또 다른 데이터 버퍼 프로세싱 명령어(예를 들어, I_DA.PROCESS, I_DA.PROCESS_EoP, I_DA.PROCESS_EoD, I_DB.PROCESS, I_DB.PROCESS_EoP, 및 I_DB.PROCESS_EoD)에 직면하였다. 따라서, 시간(407)에서는, IRDV(382)가 논리 로우로부터 논리 하이로 이행한다. 그러한 이행은, "마스터" 디바이스로 시작하고 랭크 내 각각의 상태 머신 엔진(14)을 통해 순서대로(예를 들어, F0, F1, F2, F3) 계속하여, 유효 데이터가 IR 데이터 버스(376)에 제공되기 시작할 것이라는 "마스터" 상태 머신 엔진(14)(F0)으로부터 상태 머신 엔진(14)(F0, F1, F2, F3) 전부로의 표시이다. 시간(408)에서, "마스터" 상태 머신 엔진(14)(F0)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 0을 위해 의도된 데이터의 제1 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다. 그 후, 시간(409)에서, "마스터" 상태 머신 엔진(14)(F0)은 IR 데이터 버스(376) 상에 데이터(예를 들어, 논리 그룹 1을 위해 의도된 데이터의 제2 바이트)를 제공하고 IRDQS(384) 및/또는 IRDQS#(386) 상에 논리 하이를 출력한다. 그 후 다른 상태 머신 엔진(14)이 시간(388) 내지 시간(394)에 관하여 위에서 설명된 바와 같이 IR 데이터 버스(376) 상에 데이터를 제공할 수 있다.
상태 머신 엔진(14)의 연산 동안, 데이터는 상태 머신 엔진(14) 전부가 함께 동기화되어 RSYNC(380) 및 IRDV(382)를 사용하여 동기화된 방식으로 IR 데이터 버스(376)에 제공될 수 있다. 더욱, 상태 머신 엔진(14)의 각각은 모듈(340)을 이루는 디바이스의 랭크 내 그 위치를 나타내는 명령어를 저장한다. 그와 같이, 상태 머신 엔진(14)의 각각은 데이터가 적시에 제공 및 저장되도록 IR 데이터 버스(376)를 사용하여 정연한 데이터 전송을 용이하게 하도록 데이터 저장 및 데이터 출력을 타이밍할 수 있다. 인식될 수 있는 바와 같이, 데이터 전송 프로세스 동안 오류가 일어날 수 있다. 따라서, "마스터" 상태 머신 엔진(14)(F0)은 오류가 해결될 때까지 IR 데이터 버스(376) 상의 데이터 전송을 정지(예를 들어, 차단, 기능정지, 지연 등)하도록 어느 때라도 IRDV(382)를 논리 로우로 이행할 수 있다. 더욱, 상태 머신 엔진(14)(F1, F2, F3) 중 어느 것이라도 RSYNC(380)를 논리 로우로 지향시키고, 그로써 IR 데이터 버스(376) 상의 데이터 전송이 정지되어야 한다는 표시를 "마스터" 상태 머신 엔진(14)(F0)에 제공할 수 있다.
도 18은 다수의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진(14)의 데이터 버퍼(132)에 저장된 데이터의 일례를 도시하고 있다. 구체적으로, 도 18은 8개의 논리 그룹으로 조직되는 8개의 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)을 갖는 모듈(340)에 대한 DDR3 인터페이스 뷰의 테이블(410)을 예시하고 있다. 8개의 논리 그룹을 갖는 그러한 구성은 8개의 상태 머신 엔진(14)을 갖는 모듈(340)에 대해 최대 데이터 처리율을 제공할 수 있다. 도시된 실시예에 있어서, 상태 머신 엔진(14)은 64개의 데이터 라인을 갖는 DDR3 버스 인터페이스(130)에 결합된다. 따라서, 8개의 데이터 라인이 각각의 상태 머신 엔진(14)에 결합된다. 그렇지만, 여기에서 설명되는 동일한 개념은 각각의 상태 머신 엔진(14)에 결합된 어느 적합한 수의 데이터 라인을 갖는 어느 적합한 DDR3 버스 인터페이스(130)에라도 적용될 수 있다. 더욱, 여기에서 설명되는 동일한 개념은 어느 적합한 수의 상태 머신 엔진(14)이라도 갖는 모듈(340)에 적용될 수 있다. 테이블(410)은 모듈(340)이 프로세서(12)로부터 수신하고 상태 머신 엔진(14) 간에 오프셋 방식으로 저장하는 데이터를 예시하고 있다. 데이터를 재배열하도록 프로세서(12)를 사용하기보다는 오프셋 방식으로 모듈(340) 상에 데이터를 저장하도록 모듈(340)을 사용함으로써, 프로세서(12)는 자유롭게 다른 기능을 수행할 수 있다.
테이블(410)은 프로세서(12)로부터 64개의 데이터 라인으로의 쓰기 수를 나타내는 쓰기 카운트 칼럼(412) 및 바이트가 프로세서(12)로부터 언제 수신되는지에 기반하여 수치 순서로 개개의 바이트 번호를 나타내는 바이트 번호 칼럼(414)을 포함한다. 바이트 번호 칼럼(414)은 각각의 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)의 데이터 버퍼 시스템(159)에 저장되는 특정 바이트를 나타내는 칼럼(F0, F1, F2, F3, F4, F5, F6, F7)을 포함한다. 테이블(410)은 또한 바이트 번호 칼럼(414)에 나타난 바이트가 저장되는 데이터 버퍼 시스템(159)의 데이터 버퍼(A, B)(132)의 각각 내 주소를 나타내는 데이터 버퍼 주소 칼럼(416), 및 상태 머신 엔진(14)의 특정 논리 그룹에 의해 프로세싱될 데이터를 나타내는 표적 칼럼(418)을 포함한다. 예를 들어, 프로세서(12)로부터 64개의 데이터 라인으로의 제1 쓰기(예를 들어, 쓰기 카운트 칼럼(412)에서 0) 동안, 프로세서(12)는 데이터 버퍼 시스템(159)의 제1 주소(예를 들어, 프로세서 쓰기 주소 0)의 주소 선택 및 대응하는 8개의 데이터 바이트를 DDR3 주소 버스(342)에 제공한다. 결과적으로 이것은 제1 데이터 바이트(예를 들어, 0)가 제1 상태 머신 엔진(14)(예를 들어, F0)의 제1 데이터 버퍼 주소(416)(예를 들어, 0)에서 제1 상태 머신 엔진(14)(예를 들어, F0)에 저장되고, 제2 데이터 바이트(예를 들어, 1)가 제2 상태 머신 엔진(14)(예를 들어, F1)의 동일한 제1 데이터 버퍼 주소(416)(예를 들어, 0)에서 제2 상태 머신 엔진(14)(예를 들어, F1)에 저장되고, 제3 데이터 바이트(예를 들어, 2)가 제3 상태 머신 엔진(14)(예를 들어, F2)의 동일한 제1 데이터 버퍼 주소(416)(예를 들어, 0)에서 제3 상태 머신 엔진(14)(예를 들어, F2)에 저장되고, 제4 데이터 바이트(예를 들어, 3)가 제4 상태 머신 엔진(14)(예를 들어, F3)의 동일한 제1 데이터 버퍼 주소(416)(예를 들어, 0)에서 제4 상태 머신 엔진(14)(예를 들어, F3)에 저장되고, 제5 데이터 바이트(예를 들어, 4)가 제5 상태 머신 엔진(14)(예를 들어, F4)의 동일한 제1 데이터 버퍼 주소(416)(예를 들어, 0)에서 제5 상태 머신 엔진(14)(예를 들어, F4)에 저장되고, 제6 데이터 바이트(예를 들어, 5)가 제6 상태 머신 엔진(14)(예를 들어, F5)의 동일한 제1 데이터 버퍼 주소(416)(예를 들어, 0)에서 제6 상태 머신 엔진(14)(예를 들어, F5)에 저장되고, 제7 데이터 바이트(예를 들어, 6)가 제7 상태 머신 엔진(14)(예를 들어, F6)의 동일한 제1 데이터 버퍼 주소(416)(예를 들어, 0)에서 제7 상태 머신 엔진(14)(예를 들어, F6)에 저장되고, 그리고 제8 데이터 바이트(예를 들어, 7)가 제8 상태 머신 엔진(14)(예를 들어, F7)의 동일한 제1 데이터 버퍼 주소(416)(예를 들어, 0)에서 제8 상태 머신 엔진(14)(예를 들어, F7)에 저장되는 것을 초래한다.
다른 일례로서, 프로세서(12)로부터 64개의 데이터 라인으로의 제2 쓰기(예를 들어, 쓰기 카운트 칼럼(412)에서 1) 동안, 프로세서(12)는 데이터 버퍼 시스템(159)의 제2 주소(예를 들어, 프로세서 쓰기 주소 1)의 주소 선택 및 대응하는 8개의 데이터 바이트를 DDR3 주소 버스(342)에 제공한다. 결과적으로 이것은 제1 데이터 바이트(예를 들어, 8)가 제1 상태 머신 엔진(14)(예를 들어, F0)의 제2 데이터 버퍼 주소(416)(예를 들어, 8)에서 제1 상태 머신 엔진(14)(예를 들어, F0)에 저장되고, 제2 데이터 바이트(예를 들어, 9)가 제2 상태 머신 엔진(14)(예를 들어, F1)의 동일한 제2 데이터 버퍼 주소(416)(예를 들어, 8)에서 제2 상태 머신 엔진(14)(예를 들어, F1)에 저장되고, 제3 데이터 바이트(예를 들어, 10)가 제3 상태 머신 엔진(14)(예를 들어, F2)의 동일한 제2 데이터 버퍼 주소(416)(예를 들어, 8)에서 제3 상태 머신 엔진(14)(예를 들어, F2)에 저장되고, 제4 데이터 바이트(예를 들어, 11)가 제4 상태 머신 엔진(14)(예를 들어, F3)의 동일한 제2 데이터 버퍼 주소(416)(예를 들어, 8)에서 제4 상태 머신 엔진(14)(예를 들어, F3)에 저장되고, 제5 데이터 바이트(예를 들어, 12)가 제5 상태 머신 엔진(14)(예를 들어, F4)의 동일한 제2 데이터 버퍼 주소(416)(예를 들어, 8)에서 제5 상태 머신 엔진(14)(예를 들어, F4)에 저장되고, 제6 데이터 바이트(예를 들어, 13)가 제6 상태 머신 엔진(14)(예를 들어, F5)의 동일한 제2 데이터 버퍼 주소(416)(예를 들어, 8)에서 제6 상태 머신 엔진(14)(예를 들어, F5)에 저장되고, 제7 데이터 바이트(예를 들어, 14)가 제7 상태 머신 엔진(14)(예를 들어, F6)의 동일한 제2 데이터 버퍼 주소(416)(예를 들어, 8)에서 제7 상태 머신 엔진(14)(예를 들어, F6)에 저장되고, 그리고 제8 데이터 바이트(예를 들어, 15)가 제8 상태 머신 엔진(14)(예를 들어, F7)의 동일한 제2 데이터 버퍼 주소(416)(예를 들어, 8)에서 제8 상태 머신 엔진(14)(예를 들어, F7)에 저장되는 것을 초래한다. 2개의 예에서 예시된 바와 같이, 데이터 버퍼 주소(416)는 프로세서(12)로부터의 제1 쓰기 내지 프로세서(12)로부터의 제2 쓰기 간에 8(예를 들어, 모듈(340)의 랭크 내 논리 그룹의 수와 동등한 수)만큼 변화하였다. 프로세서(12)가 직계 주소 블록을 쓰기를 계속하지만, 데이터 버퍼 시스템(159)으로의 연속하는 프로세서(12) 쓰기 시, 데이터 버퍼 주소(416)는, 제1 논리 그룹(논리 그룹 0)을 위해 의도된 모든 데이터가 모듈(340)에 제공될 때까지, 8만큼 자동으로 증분되기를 계속한다. 데이터는, 예시된 바와 같이, 유사한 방식으로 다른 논리 그룹에 제공된다.
예를 들어, 프로세서(12)로부터 64개의 데이터 라인으로의 제513 쓰기(예를 들어, 쓰기 카운트 칼럼(412)에서 512) 동안, 프로세서(12)는 데이터 버퍼 시스템(159)의 제3 주소(예를 들어, 프로세서 쓰기 주소 512)의 주소 선택 및 대응하는 8개의 데이터 바이트를 DDR3 주소 버스(342)에 제공한다. 결과적으로 이것은 제1 데이터 바이트(예를 들어, 4096)가 제1 상태 머신 엔진(14)(예를 들어, F0)의 제3 데이터 버퍼 주소(416)(예를 들어, 1)에서 제1 상태 머신 엔진(14)(예를 들어, F0)에 저장되고, 제2 데이터 바이트(예를 들어, 4097)가 제2 상태 머신 엔진(14)(예를 들어, F1)의 동일한 제3 데이터 버퍼 주소(416)(예를 들어, 1)에서 제2 상태 머신 엔진(14)(예를 들어, F1)에 저장되고, 제3 데이터 바이트(예를 들어, 4098)가 제3 상태 머신 엔진(14)(예를 들어, F2)의 동일한 제3 데이터 버퍼 주소(416)(예를 들어, 1)에서 제3 상태 머신 엔진(14)(예를 들어, F2)에 저장되고, 제4 데이터 바이트(예를 들어, 4099)가 제4 상태 머신 엔진(14)(예를 들어, F3)의 동일한 제3 데이터 버퍼 주소(416)(예를 들어, 1)에서 제4 상태 머신 엔진(14)(예를 들어, F3)에 저장되고, 제5 데이터 바이트(예를 들어, 4100)가 제5 상태 머신 엔진(14)(예를 들어, F4)의 동일한 제3 데이터 버퍼 주소(416)(예를 들어, 1)에서 제5 상태 머신 엔진(14)(예를 들어, F4)에 저장되고, 제6 데이터 바이트(예를 들어, 4101)가 제6 상태 머신 엔진(14)(예를 들어, F5)의 동일한 제3 데이터 버퍼 주소(416)(예를 들어, 1)에서 제6 상태 머신 엔진(14)(예를 들어, F5)에 저장되고, 제7 데이터 바이트(예를 들어, 4102)가 제7 상태 머신 엔진(14)(예를 들어, F6)의 동일한 제3 데이터 버퍼 주소(416)(예를 들어, 1)에서 제7 상태 머신 엔진(14)(예를 들어, F6)에 저장되고, 그리고 제8 데이터 바이트(예를 들어, 4103)가 제8 상태 머신 엔진(14)(예를 들어, F7)의 동일한 제3 데이터 버퍼 주소(416)(예를 들어, 1)에서 제8 상태 머신 엔진(14)(예를 들어, F7)에 저장되는 것을 초래한다.
테이블(410)은 쓰기 카운트 칼럼(412)으로부터의 쓰기(0 내지 511) 전부가 제1 상태 머신 엔진(14)(예를 들어, F0)을 포함하는 논리 그룹 0을 위해 의도된 데이터를 포함함을 나타냄을 유념해야 한다. 더욱, 테이블(410)은 쓰기 카운트 칼럼(412)으로부터의 쓰기(512 내지 1023) 전부가 제2 상태 머신 엔진(14)(예를 들어, F1)을 포함하는 논리 그룹 1을 위해 의도된 데이터를 포함함 등을 나타낸다.
도 19는 다수의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진(14)의 프로세스 버퍼(134)에 저장된 데이터의 일례를 도시하고 있다. 구체적으로, 도 19는 8개의 논리 그룹으로 조직되는 8개의 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)을 갖는 모듈(340)에 대한 IR 데이터 버스(376) 뷰의 테이블(421)을 예시하고 있다. 테이블(421)은 프로세서(12)로부터 수신된 개개의 바이트 번호를 나타내는 바이트 번호 칼럼(414)을 포함한다. 바이트 번호 칼럼(414)은 각각의 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)의 데이터 버퍼 시스템(159)에 저장되는 특정 바이트를 나타내는 칼럼(F0, F1, F2, F3, F4, F5, F6, F7)을 포함한다. 테이블(421)은 또한 바이트 번호 칼럼(414)에 나타난 바이트가 저장되는 데이터 버퍼 시스템(159)의 데이터 버퍼(A, B)(132) 중 하나 내 주소를 나타내는 데이터 버퍼 주소 칼럼(416)을 포함한다. 더욱, 테이블(421)은 프로세스 버퍼(134)에 저장된 개개의 바이트 번호를 나타내는 바이트 번호 칼럼(426)을 포함한다. 바이트 번호 칼럼(426)은 각각의 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)의 프로세스 버퍼(134)에 저장되는 특정 바이트를 나타내는 칼럼(F0, F1, F2, F3, F4, F5, F6, F7)을 포함한다. 예를 들어, 프로세스 버퍼(A) 로우(428)는 상태 머신 엔진(14)의 제1 프로세스 버퍼에 저장되는 특정 바이트를 나타내고, 프로세스 버퍼(B) 로우(430)는 상태 머신 엔진(14)의 제2 프로세스 버퍼에 저장되는 특정 바이트를 나타낸다.
따라서, 테이블(421)은 데이터가 오프셋 방식으로 데이터 버퍼 시스템(159)에 저장되고 스트레이트 방식으로 프로세스 버퍼(134)에 제공됨을 예시하고 있다. 예를 들어, IR 데이터 버스(376) 상으로의 제1 데이터 버스트 동안, 상태 머신 엔진(14)(F0)은 프로세서(12)로부터 수신된 바이트 0, 4096, 8192, 12288, 16384, 20480, 24576, 28672(예를 들어, 논리 그룹의 각각에 대한 제1 바이트)를 제공할 수 있다. IR 데이터 버스(376) 상으로의 제2 버스트 동안, 상태 머신 엔진(14)(F1)은 프로세서(12)로부터 수신된 바이트 1, 4097, 8193, 12289, 16385, 20481, 24577, 28673(예를 들어, 논리 그룹의 각각에 대한 제2 바이트)를 제공할 수 있고, 등등이다. 상태 머신 엔진(14)의 각각은 그 상태 머신 엔진의 논리 그룹에 대응하는 데이터 버스트로부터의 바이트를 저장하도록 구성된다. 예를 들어, 상태 머신 엔진(14)(F0)은 IR 데이터 버스(376)에 제공된 각각의 데이터 버스트의 제1 바이트를 저장하도록 구성되고, 상태 머신 엔진(14)(F1)은 IR 데이터 버스(376)에 제공된 각각의 데이터 버스트의 제2 바이트를 저장하도록 구성되고, 등등이다. 그리하여, 데이터 버퍼 시스템(159)에 의해 저장될 때 오프셋 방식으로 저장되었던 데이터는 각각의 상태 머신 엔진(14)이 분석을 위해 올바른 순서로 그 의도된 데이터를 수신할 수 있도록 IR 데이터 버스(376)를 통하여 상태 머신 엔진(14)에 제공된다.
도 20은 하나의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진(14)의 데이터 버퍼(132)에 저장된 데이터의 일례를 도시하고 있다. 구체적으로, 도 20은 하나의 논리 그룹으로 조직되는 8개의 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)을 갖는 모듈(340)에 대한 DDR3 인터페이스 뷰의 테이블(432)을 예시하고 있다. 예시된 바와 같이, 데이터는 프로세서(12)에 의해 제공되고 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)에 저장된다. 상태 머신 엔진(14) 전부는 단일 논리 그룹(예를 들어, 논리 그룹 0)의 일부분이다. 도시된 실시예에 있어서, 모듈(340)에 의해 수신된 데이터는 데이터 버퍼 시스템(159)에 연이어 저장된다.
도 21은 하나의 논리 그룹으로 조직되는 다수의 물리적 상태 머신 엔진(14)의 프로세스 버퍼(134)에 저장된 데이터의 일례를 도시하고 있다. 구체적으로, 도 21은 하나의 논리 그룹으로 조직되는 8개의 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7)을 갖는 모듈(340)에 대한 IR 데이터 버스(376) 뷰의 테이블(434)을 예시하고 있다. IR 데이터 버스(376) 상으로의 제1 데이터 버스트 동안, 상태 머신 엔진(14)(F0)은 프로세서(12)로부터 수신된 바이트 0(예를 들어, 논리 그룹에 대한 제1 바이트)를 제공할 수 있고, 상태 머신 엔진(14)(F1)은 프로세서(12)로부터 수신된 바이트 1(예를 들어, 논리 그룹에 대한 제2 바이트)를 제공할 수 있고 등등, 8개의 바이트가 그 데이터 버스트 동안 제공된다. 상태 머신 엔진(14)의 각각은 그 상태 머신 엔진의 논리 그룹에 대응하는 데이터 버스트로부터의 바이트를 저장하도록 구성된다. 예를 들어, 상태 머신 엔진(14)(F0, F1, F2, F3, F4, F5, F6, F7) 전부는 IR 데이터 버스(376)에 제공된 각각의 데이터 버스트의 모든 바이트를 저장하도록 구성된다. 그리하여, 데이터 버퍼 시스템(159)에 의해 저장된 데이터 전부는 각각의 상태 머신 엔진(14)이 병렬 분석을 위해 데이터 전부를 수신할 수 있도록 IR 데이터 버스(376)를 통하여 상태 머신 엔진(14)에 제공된다. 인식될 수 있는 바와 같이, 도 18 내지 도 21은 4 K 바이트를 갖는 버퍼를 예시하고 있기는 하지만, 다른 실시예는 어느 적합한 사이즈(예를 들어, 8 K 바이트, 16 K 바이트, 32 K 바이트, 64 K 바이트 등)라도 갖는 버퍼를 포함할 수 있다.
여기에서 사용될 때, 용어 장치는 단일 모듈, 또는 하나 이상의 모듈을 포함하는 시스템일 수 있다. 본 발명이 다양한 수정 및 대안의 형태가 수월할 수 있지만, 특정 실시예들이 도면에서 예로써 도시되었고 본 명세서에서 상세히 설명되었다. 그렇지만, 본 발명은 개시된 특정 형태에 국한하려는 의도가 아님을 이해해야 한다. 그보다는, 본 발명은 이하의 첨부된 청구범위에 의해 정의되는 바와 같이 본 발명의 취지 및 범위 내에 드는 모든 수정, 균등물 및 대안을 망라하려는 것이다.
Claims (62)
- 장치로서,
제1 복수의 데이터 라인 및 제2 복수의 데이터 라인을 포함하는 데이터 버스로서, 상기 제1 복수의 데이터 라인은 상기 제2 복수의 데이터 라인과 병렬로 데이터를 제공하도록 구성되는 상기 데이터 버스;
상기 제1 복수의 데이터 라인에 결합된 제1 상태 머신 엔진; 및
상기 제2 복수의 데이터 라인에 결합된 제2 상태 머신 엔진을 포함하되, 상기 제1 상태 머신 엔진은 상기 제2 복수의 데이터 라인으로부터 데이터 스트림의 제2 부분을 수신하는 상기 제2 상태 머신 엔진과 병렬로 상기 제1 복수의 데이터 라인으로부터 상기 데이터 스트림의 제1 부분을 수신하도록 구성되고,
상기 제2 상태 머신 엔진은 상기 데이터 스트림의 상기 제2 부분을 상기 제1 상태 머신 엔진에 제공하도록 구성되고, 그리고 상기 제1 상태 머신 엔진은 상기 데이터 스트림의 상기 제1 부분 및 상기 데이터 스트림의 상기 제2 부분을 분석하도록 구성되는 장치. - 제1항에 있어서, 상기 제1 및 제2 상태 머신 엔진의 각각은 복수의 구성가능한 엘리먼트를 갖는 각각의 상태 머신 래티스(state machine lattice)를 포함하고, 상기 복수의 구성가능한 엘리먼트의 각각의 구성가능한 엘리먼트는 상기 데이터 스트림의 적어도 일부를 분석하고 그리고 상기 분석의 결과를 출력하도록 구성된 복수의 셀을 포함하는 장치.
- 제1항에 있어서, 상기 제1 상태 머신 엔진에 그리고 상기 제2 상태 머신 엔진에 결합된 주소 버스를 포함하는 장치.
- 제3항에 있어서, 상기 제1 및 제2 상태 머신 엔진은 병렬로 상기 주소 버스로부터 신호를 수신하도록 구성되는 장치.
- 제1항에 있어서, 상기 제1 상태 머신 엔진에 결합된 제1 제어 라인 및 상기 제2 상태 머신 엔진에 결합된 제2 제어 라인을 포함하되, 상기 제1 상태 머신 엔진은 상기 제2 제어 라인으로부터 제2 신호 세트를 수신하는 상기 제2 상태 머신 엔진과 병렬로 상기 제1 제어 라인으로부터 제1 신호 세트를 수신하도록 구성되는 장치.
- 제1항에 있어서, 상기 데이터 버스는 제3 복수의 데이터 라인, 제4 복수의 데이터 라인, 제5 복수의 데이터 라인, 제6 복수의 데이터 라인, 제7 복수의 데이터 라인, 및 제8 복수의 데이터 라인을 포함하되, 상기 제1 복수의 데이터 라인은 상기 제2 복수의 데이터 라인, 상기 제3 복수의 데이터 라인, 상기 제4 복수의 데이터 라인, 상기 제5 복수의 데이터 라인, 상기 제6 복수의 데이터 라인, 상기 제7 복수의 데이터 라인, 및 상기 제8 복수의 데이터 라인과 병렬로 데이터를 제공하도록 구성되는 장치.
- 제6항에 있어서,
상기 제3 복수의 데이터 라인에 결합된 제3 상태 머신 엔진;
상기 제4 복수의 데이터 라인에 결합된 제4 상태 머신 엔진;
상기 제5 복수의 데이터 라인에 결합된 제5 상태 머신 엔진;
상기 제6 복수의 데이터 라인에 결합된 제6 상태 머신 엔진;
상기 제7 복수의 데이터 라인에 결합된 제7 상태 머신 엔진; 및
상기 제8 복수의 데이터 라인에 결합된 제8 상태 머신 엔진을 포함하는 장치. - 제7항에 있어서, 상기 제1 상태 머신 엔진은 상기 제2 복수의 데이터 라인으로부터 상기 데이터 스트림의 상기 제2 부분을 수신하는 상기 제2 상태 머신 엔진, 상기 제3 복수의 데이터 라인으로부터 상기 데이터 스트림의 제3 부분을 수신하는 상기 제3 상태 머신 엔진, 상기 제4 복수의 데이터 라인으로부터 상기 데이터 스트림의 제4 부분을 수신하는 상기 제4 상태 머신 엔진, 상기 제5 복수의 데이터 라인으로부터 상기 데이터 스트림의 제5 부분을 수신하는 상기 제5 상태 머신 엔진, 상기 제6 복수의 데이터 라인으로부터 상기 데이터 스트림의 제6 부분을 수신하는 상기 제6 상태 머신 엔진, 상기 제7 복수의 데이터 라인으로부터 상기 데이터 스트림의 제7 부분을 수신하는 상기 제7 상태 머신 엔진, 및 상기 제8 복수의 데이터 라인으로부터 상기 데이터 스트림의 제8 부분을 수신하는 상기 제8 상태 머신 엔진과 병렬로 상기 제1 복수의 데이터 라인으로부터 상기 데이터 스트림의 상기 제1 부분을 수신하도록 구성되는 장치.
- 제8항에 있어서, 상기 제3 상태 머신 엔진은 상기 데이터 스트림의 상기 제3 부분을 상기 제1 상태 머신 엔진에 제공하도록 구성되고, 상기 제4 상태 머신 엔진은 상기 데이터 스트림의 상기 제4 부분을 상기 제1 상태 머신 엔진에 제공하도록 구성되고, 상기 제5 상태 머신 엔진은 상기 데이터 스트림의 상기 제5 부분을 상기 제1 상태 머신 엔진에 제공하도록 구성되고, 상기 제6 상태 머신 엔진은 상기 데이터 스트림의 상기 제6 부분을 상기 제1 상태 머신 엔진에 제공하도록 구성되고, 상기 제7 상태 머신 엔진은 상기 데이터 스트림의 상기 제7 부분을 상기 제1 상태 머신 엔진에 제공하도록 구성되고, 상기 제8 상태 머신 엔진은 상기 데이터 스트림의 상기 제8 부분을 상기 제1 상태 머신 엔진에 제공하도록 구성되고, 그리고 상기 제1 상태 머신 엔진은 상기 데이터 스트림의 상기 제3 부분, 상기 데이터 스트림의 상기 제4 부분, 상기 데이터 스트림의 상기 제5 부분, 상기 데이터 스트림의 상기 제6 부분, 상기 데이터 스트림의 상기 제7 부분, 및 상기 데이터 스트림의 상기 제8 부분을 분석하도록 구성되는 장치.
- 제1항에 있어서, 상기 제1 상태 머신 엔진은 상기 데이터 스트림의 상기 제1 부분을 저장하도록 구성된 제1 버퍼를 포함하고, 상기 제2 상태 머신 엔진은 상기 데이터 스트림의 상기 제2 부분을 저장하도록 구성된 제2 버퍼를 포함하는 장치.
- 제10항에 있어서, 상기 제1 상태 머신 엔진은 상기 데이터 스트림의 상기 제1 부분 및 상기 데이터 스트림의 상기 제2 부분을 저장하도록 구성된 제3 버퍼를 포함하는 장치.
- 제1항에 있어서, 상기 제2 상태 머신 엔진으로부터 상기 데이터 스트림의 상기 제2 부분을 수신하고 그리고 상기 데이터 스트림의 상기 제2 부분을 상기 제1 상태 머신 엔진에 제공하도록 구성된 버퍼 인터페이스를 포함하는 장치.
- 제12항에 있어서, 상기 버퍼 인터페이스는 상기 제1 상태 머신 엔진과 상기 제2 상태 머신 엔진 중 적어도 하나에 명령어를 제공하도록 구성되는 장치.
- 제12항에 있어서, 상기 제1 상태 머신 엔진은 상기 버퍼 인터페이스에 제공된 제1 데이터 세트를 래칭하도록 구성된 제1 버퍼를 포함하고 상기 제2 상태 머신 엔진은 상기 버퍼 인터페이스에 제공된 제2 데이터 세트를 래칭하도록 구성된 제2 버퍼를 포함하는 장치.
- 제14항에 있어서, 상기 제1 버퍼는 제1 예정된 인터벌로 상기 제1 데이터 세트를 래칭하도록 구성되고, 상기 제2 버퍼는 제2 예정된 인터벌로 상기 제2 데이터 세트를 래칭하도록 구성되는 장치.
- 제1항에 있어서, 상기 장치는 모듈을 포함하고, 상기 모듈은 상기 데이터 버스, 상기 제1 상태 머신 엔진, 및 제2 상태 머신 엔진을 포함하는 장치.
- 제1항에 있어서, 상기 장치는 데이터 분석 시스템을 포함하고, 상기 데이터 분석 시스템은 상기 데이터 버스, 상기 제1 상태 머신 엔진, 및 제2 상태 머신 엔진을 포함하는 장치.
- 제1항에 있어서, 상기 제1 및 제2 상태 머신 엔진 각각은 별개의 칩으로 구현되는 장치.
- 데이터를 분석하기 위한 방법으로서,
데이터 버스의 제1 복수의 데이터 라인으로부터 데이터 스트림의 제1 부분을, 제1 상태 머신 엔진에서, 수신하는 단계;
상기 데이터 버스의 제2 복수의 데이터 라인으로부터 상기 데이터 스트림의 제2 부분을, 제2 상태 머신 엔진에서, 수신하는 단계로서, 상기 데이터 스트림의 상기 제2 부분은 상기 데이터 스트림의 상기 제1 부분을 수신하는 상기 제1 상태 머신 엔진과 병렬로 상기 제2 상태 머신 엔진에서 수신되는 상기 수신하는 단계; 및
상기 데이터 스트림의 상기 제2 부분을 상기 제2 상태 머신 엔진으로부터 상기 제1 상태 머신 엔진에 제공하는 단계를 포함하는 방법. - 제19항에 있어서, 상기 제2 부분을 상기 제2 상태 머신 엔진으로부터 상기 제1 상태 머신 엔진에 제공한 이후에, 상기 제1 상태 머신 엔진을 사용하여 상기 데이터 스트림의 상기 제1 부분 및 상기 데이터 스트림의 상기 제2 부분을 분석하는 단계를 포함하는 방법.
- 제19항에 있어서, 상기 제1 부분 및 상기 제2 부분을 수신하기 이전에, 상기 제1 상태 머신 엔진의 제1 메모리 주소 및 상기 제2 상태 머신 엔진의 제2 메모리 주소를 선택하기 위해 상기 제1 및 제2 상태 머신 엔진에서 주소 신호를 병렬로 수신하는 단계를 포함하는 방법.
- 제21항에 있어서, 상기 제1 메모리 주소는 상기 제2 메모리 주소와 같은 방법.
- 장치로서,
데이터 스트림의 제1 부분을 수신하도록 구성된 제1 상태 머신 엔진;
상기 데이터 스트림의 제2 부분을 수신하도록 구성된 제2 상태 머신 엔진; 및
상기 제1 상태 머신 엔진과 상기 제2 상태 머신 엔진 간에 데이터 전송을 가능하게 하도록 구성된 버퍼 인터페이스를 포함하되, 상기 버퍼 인터페이스는 상기 제1 상태 머신 엔진에 그리고 상기 제2 상태 머신 엔진에 결합되어 상기 제1 상태 머신 엔진과 상기 제2 상태 머신 엔진 간에 데이터를 제공하도록 구성된 인터페이스 데이터 버스를 포함하는 장치. - 제23항에 있어서, 상기 인터페이스 데이터 버스는 양방향 버스인 장치.
- 제23항에 있어서, 상기 인터페이스 데이터 버스는 8 비트 인터-랭크 데이터 버스를 포함하는 장치.
- 제23항에 있어서, 상기 버퍼 인터페이스는 상기 제1 상태 머신 엔진에 그리고 상기 제2 상태 머신 엔진에 결합되어 상기 제1 상태 머신 엔진과 상기 제2 상태 머신 엔진 간에 데이터 전송을 조정하도록 구성된 명령어 버스를 더 포함하는 장치.
- 제26항에 있어서, 상기 제1 상태 머신 엔진은 상기 제1 상태 머신 엔진과 상기 제2 상태 머신 엔진 간에 데이터 전송을 조정하기 위해 상기 명령어 버스에 명령어를 제공하도록 구성된 마스터 디바이스인 장치.
- 제26항에 있어서, 상기 제2 상태 머신 엔진은 마스터 디바이스에 의해 상기 명령어 버스에 제공된 명령어를 수신하도록 구성된 슬레이브 디바이스이되, 상기 명령어는 상기 제2 상태 머신 엔진이 상기 데이터 스트림의 상기 제2 부분을 상기 인터페이스 데이터 버스에 제공하는 시간을 제어하도록 구성되는 장치.
- 제23항에 있어서, 상기 제1 상태 머신 엔진과 상기 제2 상태 머신 엔진 중 적어도 하나는 데이터가 상기 인터페이스 데이터 버스 상에 제공될 수 있게 하거나, 데이터가 상기 인터페이스 데이터 버스에 제공되고 있는 것을 정지시키거나, 또는 그 소정 조합이도록 구성된 출력을 포함하는 장치.
- 제23항에 있어서, 상기 제1 상태 머신 엔진과 상기 제2 상태 머신 엔진 중 적어도 하나는 상기 인터페이스 데이터 버스에 제공된 데이터를 동기화하도록 구성된 출력을 포함하는 장치.
- 제23항에 있어서, 상기 제1 및 제2 상태 머신 엔진은 논리 그룹의 일부분이고, 상기 제1 상태 머신 엔진은 상기 제2 상태 머신 엔진과 상기 데이터 스트림의 동일한 부분을 분석하도록 구성되는 장치.
- 제23항에 있어서, 상기 제1 상태 머신 엔진은 제1 논리 그룹의 일부분이고, 상기 제2 상태 머신 엔진은 제2 논리 그룹의 일부분이고, 상기 제1 및 제2 논리 그룹은 상기 데이터 스트림의 다른 부분을 분석하도록 구성되는 장치.
- 제23항에 있어서, 상기 제1 상태 머신 엔진은 제1 논리 그룹의 일부분이고, 상기 제2 상태 머신 엔진은 제2 논리 그룹의 일부분이고, 상기 제1 논리 그룹과 상기 제2 논리 그룹 중 적어도 하나는 복수의 상태 머신 엔진을 포함하는 장치.
- 제33항에 있어서, 상기 제1 논리 그룹은 상기 제2 논리 그룹보다 더 많은 수의 상태 머신 엔진을 포함하는 장치.
- 제23항에 있어서, 상기 제1 상태 머신 엔진은 제1 버스 위치를 포함하고, 상기 제1 상태 머신 엔진은 상기 제1 버스 위치에 대응하는 데이터를 저장하도록 구성된 제1 저장소를 포함하고, 상기 제2 상태 머신 엔진은 제2 버스 위치를 포함하고, 상기 제2 상태 머신 엔진은 상기 제2 버스 위치에 대응하는 데이터를 저장하도록 구성된 제2 저장소를 포함하는 장치.
- 제23항에 있어서, 상기 제1 상태 머신 엔진은 상기 인터페이스 데이터 버스의 버스 폭에 대응하는 데이터를 저장하도록 구성되는 장치.
- 제23항에 있어서, 상기 제1 상태 머신 엔진은 동기화 신호가 상기 제1 및 제2 상태 머신 엔진에 의해 수신된 후에 상기 인터페이스 데이터 버스에 제공된 제1 데이터 세트를 저장하도록 구성되고, 상기 제2 상태 머신 엔진은 동기화 신호가 상기 제1 및 제2 상태 머신 엔진에 의해 수신된 후에 상기 인터페이스 데이터 버스에 제공된 제2 데이터 세트를 저장하도록 구성되는 장치.
- 제37항에 있어서, 상기 제1 및 제2 데이터 세트의 각각은 일 바이트를 포함하는 장치.
- 제23항에 있어서, 상기 제1 및 제2 상태 머신 엔진의 각각은 상태 머신 엔진 랭크의 일부분인 장치.
- 제39항에 있어서, 상기 상태 머신 엔진 랭크의 각각의 상태 머신 엔진은 각각의 바이트를 상기 버퍼 인터페이스에 순차적으로 제공하도록 구성되는 장치.
- 제40항에 있어서, 상기 상태 머신 엔진 랭크의 각각의 상태 머신 엔진은 상기 버퍼 인터페이스에 제공된 상기 각각의 바이트의 전부를 수신하도록 구성되는 장치.
- 제40항에 있어서, 상기 상태 머신 엔진 랭크의 각각의 상태 머신 엔진은 상기 버퍼 인터페이스에 제공된 상기 각각의 바이트의 일부를 수신하도록 구성되는 장치.
- 버퍼 인터페이스를 동작시키기 위한 방법으로서,
데이터 스트림의 제1 부분을, 마스터 칩에서, 수신하는 단계;
상기 데이터 스트림의 제2 부분을, 슬레이브 칩에서, 수신하는 단계;
상기 마스터 칩과 상기 슬레이브 칩 간에 데이터 전송을 개시하기 위해 상기 버퍼 인터페이스를 사용하여 제1 신호를 상기 마스터 칩으로부터 상기 슬레이브 칩에 제공하는 단계;
상기 제1 신호를 상기 마스터 칩으로부터 제공한 후에, 상기 마스터 칩에 의해, 제1 시간에서 상기 데이터 스트림의 상기 제1 부분을 상기 버퍼 인터페이스에 제공하는 단계; 및
상기 제1 시간 후에, 상기 슬레이브 칩에 의해, 제2 시간에서 상기 데이터 스트림의 상기 제2 부분을 상기 버퍼 인터페이스에 제공하는 단계를 포함하는 방법. - 제43항에 있어서, 상기 마스터 칩과 상기 슬레이브 칩 간에 데이터 전송을 정지시키기 위해 상기 버퍼 인터페이스를 사용하여 제2 신호를 상기 마스터 칩으로부터 상기 슬레이브 칩에 제공하는 단계를 포함하는 방법.
- 제43항에 있어서, 상기 마스터 칩과 상기 슬레이브 칩 간에 데이터 전송을 정지시키기 위해 상기 버퍼 인터페이스를 사용하여 제2 신호를 상기 슬레이브 칩으로부터 상기 마스터 칩에 제공하는 단계를 포함하는 방법.
- 제43항에 있어서, 상기 제1 부분을 상기 마스터 칩에서 수신하고 상기 제2 부분을 상기 슬레이브 칩에서 수신한 이후에, 소정 시간 기간 동안 데이터를 분석하기 위해 상기 마스터 칩과 상기 슬레이브 칩 중 적어도 하나에 프로세서에 의해 명령어를 제공하는 단계를 포함하는 방법.
- 제43항에 있어서, 명령어가 실행되기 전에 동기화하도록 상기 마스터 칩 및 상기 슬레이브 칩에 명령하기 위해 상기 마스터 칩에 그리고 상기 슬레이브 칩에 동기화 명령어를 제공하는 단계를 포함하는 방법.
- 제47항에 있어서, 상기 명령어는 데이터 버퍼 프로세싱 명령어를 포함하는 방법.
- 데이터를 저장하기 위한 방법으로서,
프로세서로부터 제1 주소를 수신하는 단계;
상기 프로세서로부터 제1 데이터 블록의 제1 부분을, 제1 상태 머신 엔진에서, 수신하는 단계;
상기 프로세서로부터 상기 제1 데이터 블록의 제2 부분을, 제2 상태 머신 엔진에서, 수신하는 단계로서, 상기 제1 데이터 블록의 상기 제2 부분은 상기 제1 데이터 블록의 상기 제1 부분을 수신하는 상기 제1 상태 머신 엔진과 병렬로 상기 제2 상태 머신 엔진에서 수신되는 상기 수신하는 단계;
상기 제1 주소에 대응하는 상기 제1 상태 머신 엔진의 제1 메모리 장소에서 상기 제1 데이터 블록의 상기 제1 부분을 저장하는 단계;
상기 제1 주소에 대응하는 상기 제2 상태 머신 엔진의 제2 메모리 장소에서 상기 제1 데이터 블록의 상기 제2 부분을 저장하는 단계;
상기 프로세서로부터 제2 주소를 수신하는 단계;
상기 프로세서로부터 상기 제1 데이터 블록의 제3 부분을, 상기 제1 상태 머신 엔진에서, 수신하는 단계;
상기 프로세서로부터 상기 제1 데이터 블록의 제4 부분을, 상기 제2 상태 머신 엔진에서, 수신하는 단계로서, 상기 제1 데이터 블록의 상기 제4 부분은 상기 제1 데이터 블록의 상기 제3 부분을 수신하는 상기 제1 상태 머신 엔진과 병렬로 상기 제2 상태 머신 엔진에서 수신되는 상기 수신하는 단계;
상기 제2 주소에 대응하는 상기 제1 상태 머신 엔진의 제3 메모리 장소에서 상기 제1 데이터 블록의 상기 제3 부분을 저장하는 단계; 및
상기 제2 주소에 대응하는 상기 제2 상태 머신 엔진의 제4 메모리 장소에서 상기 제1 데이터 블록의 상기 제4 부분을 저장하는 단계를 포함하되,
상기 제1 상태 머신 엔진은 상기 제1 데이터 블록의 상기 제1 부분을 수신한 직후에 상기 제1 데이터 블록의 상기 제3 부분을 수신하고, 상기 제2 상태 머신 엔진은 상기 제1 데이터 블록의 상기 제2 부분을 수신한 직후에 상기 제1 데이터 블록의 상기 제4 부분을 수신하고, 상기 제3 메모리 장소는 예정된 오프셋만큼 상기 제1 메모리 장소로부터 오프셋되고, 상기 제4 메모리 장소는 상기 예정된 오프셋만큼 상기 제2 메모리 장소로부터 오프셋되는 방법. - 제49항에 있어서, 상기 제1 상태 머신 엔진의 래티스로 상기 제1 데이터 블록을 분석하는 단계를 포함하는 방법.
- 제49항에 있어서,
상기 제1 데이터 블록의 상기 제1 부분 및 상기 제1 데이터 블록의 상기 제3 부분을 상기 제1 상태 머신 엔진으로부터 버퍼 인터페이스에 제공하는 단계;
상기 제1 데이터 블록의 상기 제2 부분 및 상기 제1 데이터 블록의 상기 제4 부분을 상기 제2 상태 머신 엔진으로부터 상기 버퍼 인터페이스에 제공하는 단계; 및
상기 버퍼 인터페이스로부터 상기 제1 데이터 블록의 상기 제1, 제2, 제3 및 제4 부분을, 상기 제1 상태 머신 엔진에서, 수신하는 단계를 포함하는 방법. - 제51항에 있어서, 상기 버퍼 인터페이스로부터 수신된 데이터의 타이밍에 적어도 부분적으로 기반하여 상기 버퍼 인터페이스로부터 수신된 데이터를, 상기 제1 상태 머신 엔진에 의해, 저장하는 단계를 포함하는 방법.
- 제51항에 있어서, 상기 제1 데이터 블록의 상기 제1, 제2, 제3 및 제4 부분이 프로세서로부터 제공되는 것과 동일한 순서로 상기 제1 데이터 블록의 상기 제1, 제2, 제3 및 제4 부분을, 상기 제1 상태 머신 엔진에서, 수신하는 단계를 포함하는 방법.
- 제49항에 있어서,
상기 프로세서로부터 제3 주소를 수신하는 단계;
상기 프로세서로부터 제2 데이터 블록의 제1 부분을, 상기 제1 상태 머신 엔진에서, 수신하는 단계;
상기 프로세서로부터 상기 제2 데이터 블록의 제2 부분을, 상기 제2 상태 머신 엔진에서, 수신하는 단계로서, 상기 제2 데이터 블록의 상기 제2 부분은 상기 제2 데이터 블록의 상기 제1 부분을 수신하는 상기 제1 상태 머신 엔진과 병렬로 상기 제2 상태 머신 엔진에서 수신되는 상기 수신하는 단계;
상기 제3 주소에 대응하는 상기 제1 상태 머신 엔진의 제5 메모리 장소에서 상기 제2 데이터 블록의 상기 제1 부분을 저장하는 단계;
상기 제3 주소에 대응하는 상기 제2 상태 머신 엔진의 제6 메모리 장소에서 상기 제2 데이터 블록의 상기 제2 부분을 저장하는 단계;
상기 프로세서로부터 제4 주소를 수신하는 단계;
상기 프로세서로부터 상기 제2 데이터 블록의 제3 부분을, 상기 제1 상태 머신 엔진에서, 수신하는 단계;
상기 프로세서로부터 상기 제2 데이터 블록의 제4 부분을, 상기 제2 상태 머신 엔진에서, 수신하는 단계로서, 상기 제2 데이터 블록의 상기 제4 부분은 상기 제2 데이터 블록의 상기 제3 부분을 수신하는 상기 제1 상태 머신 엔진과 병렬로 상기 제2 상태 머신 엔진에서 수신되는 상기 수신하는 단계;
상기 제4 주소에 대응하는 상기 제1 상태 머신 엔진의 제7 메모리 장소에서 상기 제2 데이터 블록의 상기 제3 부분을 저장하는 단계; 및
상기 제4 주소에 대응하는 상기 제2 상태 머신 엔진의 제8 메모리 장소에서 상기 제2 데이터 블록의 상기 제4 부분을 저장하는 단계를 포함하되,
상기 제1 상태 머신 엔진은 상기 제2 데이터 블록의 상기 제1 부분을 수신한 직후에 상기 제2 데이터 블록의 상기 제3 부분을 수신하고, 상기 제2 상태 머신 엔진은 상기 제2 데이터 블록의 상기 제2 부분을 수신한 직후에 상기 제2 데이터 블록의 상기 제4 부분을 수신하고, 상기 제5 메모리 장소는 일만큼 상기 제1 메모리 장소로부터 오프셋되고, 상기 제7 메모리 장소는 상기 예정된 오프셋만큼 상기 제5 메모리 장소로부터 오프셋되고, 상기 제6 메모리 장소는 일만큼 상기 제2 메모리 장소로부터 오프셋되고, 상기 제8 메모리 장소는 상기 예정된 오프셋만큼 상기 제6 메모리 장소로부터 오프셋되는 방법. - 제54항에 있어서, 상기 제2 상태 머신 엔진의 래티스로 상기 제2 데이터 블록을 분석하는 단계를 포함하는 방법.
- 데이터를 프로세싱하기 위한 방법으로서,
복수의 상태 머신 엔진 중 제1 상태 머신 엔진에 의해 분석될 프로세서로부터의 제1 데이터 블록을, 상기 복수의 상태 머신 엔진에서, 수신하는 단계; 및
상기 복수의 상태 머신 엔진 중 제2 상태 머신 엔진에 의해 분석될 상기 프로세서로부터의 제2 데이터 블록을, 상기 복수의 상태 머신 엔진에서, 수신하는 단계를 포함하되,
상기 제1 데이터 블록에서 유효 데이터의 길이는 상기 제2 데이터 블록에서 유효 데이터의 길이와 다른 방법. - 제56항에 있어서,
상기 제1 데이터 블록에 대응하는 상기 프로세서로부터의 제1 명령어를, 상기 제1 상태 머신 엔진에서, 수신하는 단계; 및
상기 제2 데이터 블록에 대응하는 상기 프로세서로부터의 제2 명령어를, 상기 제2 상태 머신 엔진에서, 수신하는 단계를 포함하는 방법. - 제57항에 있어서, 상기 프로세서로부터의 상기 제1 데이터 블록을 수신하는 단계는 상기 제1 상태 머신 엔진에서 상기 제1 데이터 블록의 제1 부분을 수신하는 단계 및 상기 제2 상태 머신 엔진에서 상기 제1 데이터 블록의 제2 부분을 수신하는 단계를 포함하는 방법.
- 제58항에 있어서, 상기 프로세서로부터의 상기 제2 데이터 블록을 수신하는 단계는 상기 제1 상태 머신 엔진에서 상기 제2 데이터 블록의 제1 부분을 수신하는 단계 및 상기 제2 상태 머신 엔진에서 상기 제2 데이터 블록의 제2 부분을 수신하는 단계를 포함하는 방법.
- 제59항에 있어서,
상기 제1 데이터 블록의 상기 제1 부분 및 상기 제1 데이터 블록의 상기 제2 부분을 버퍼 인터페이스에 제공하는 단계, 및 상기 제2 데이터 블록의 상기 제1 부분 및 상기 제2 데이터 블록의 상기 제2 부분을 상기 버퍼 인터페이스에 제공하는 단계를 포함하는 방법. - 제60항에 있어서, 상기 제1 명령어는 상기 제1 데이터 블록에 대한 데이터의 바이트의 총 수를 포함하는 방법.
- 제61항에 있어서, 상기 제1 명령어는 상기 제1 데이터 블록에 대한 유효 바이트의 수를 포함하는 방법.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361788364P | 2013-03-15 | 2013-03-15 | |
US61/788,364 | 2013-03-15 | ||
US14/065,168 US9448965B2 (en) | 2013-03-15 | 2013-10-28 | 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 |
US14/065,168 | 2013-10-28 | ||
PCT/US2014/023589 WO2014150554A1 (en) | 2013-03-15 | 2014-03-11 | Methods and apparatuses for providing data received by a state machine engine |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150132226A KR20150132226A (ko) | 2015-11-25 |
KR102168930B1 true KR102168930B1 (ko) | 2020-10-23 |
Family
ID=51532880
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157027385A KR102168930B1 (ko) | 2013-03-15 | 2014-03-11 | 상태 머신 엔진에 의해 수신된 데이터를 제공하기 위한 방법 및 장치 |
Country Status (7)
Country | Link |
---|---|
US (5) | US9448965B2 (ko) |
EP (1) | EP2972920B1 (ko) |
JP (1) | JP6177418B2 (ko) |
KR (1) | KR102168930B1 (ko) |
CN (2) | CN105051711B (ko) |
TW (1) | TWI625631B (ko) |
WO (1) | WO2014150554A1 (ko) |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US20100174887A1 (en) | 2009-01-07 | 2010-07-08 | Micron Technology Inc. | Buses for Pattern-Recognition Processors |
US8489534B2 (en) * | 2009-12-15 | 2013-07-16 | Paul D. Dlugosch | Adaptive content inspection |
US9323994B2 (en) | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
US9524248B2 (en) | 2012-07-18 | 2016-12-20 | Micron Technology, Inc. | Memory management for a hierarchical memory system |
US9063532B2 (en) * | 2012-08-31 | 2015-06-23 | Micron Technology, Inc. | Instruction insertion in state machine engines |
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 |
US9703574B2 (en) | 2013-03-15 | 2017-07-11 | Micron Technology, Inc. | Overflow detection and correction in state machine engines |
US12028333B2 (en) | 2013-05-14 | 2024-07-02 | Kara Partners Llc | Systems and methods for variable-length encoding and decoding for enhancing computer systems |
US10594687B2 (en) | 2013-05-14 | 2020-03-17 | Kara Partners Llc | Technologies for enhancing computer security |
US10057250B2 (en) | 2013-05-14 | 2018-08-21 | Kara Partners Llc | Technologies for enhancing computer security |
WO2016109570A1 (en) | 2014-12-30 | 2016-07-07 | Micron Technology, Inc | Systems and devices for accessing a state machine |
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 |
US9977652B2 (en) * | 2015-04-14 | 2018-05-22 | University Of Virginia Patent Foundation | System, method, and computer-readable medium for high throughput pseudo-random number generation |
US11580472B2 (en) * | 2015-05-14 | 2023-02-14 | Palantir Technologies Inc. | Systems and methods for state machine management |
US10691964B2 (en) | 2015-10-06 | 2020-06-23 | Micron Technology, Inc. | Methods and systems for event reporting |
US10977309B2 (en) | 2015-10-06 | 2021-04-13 | Micron Technology, Inc. | Methods and systems for creating networks |
US10846103B2 (en) | 2015-10-06 | 2020-11-24 | Micron Technology, Inc. | Methods and systems for representing processing resources |
CN105573949A (zh) * | 2015-12-09 | 2016-05-11 | 熊猫电子集团有限公司 | Vpx架构具有jesd204b接口的采集处理电路 |
KR102416176B1 (ko) | 2016-05-10 | 2022-07-01 | 엘에스일렉트릭(주) | 슬레이브 디바이스 제어 방법 |
US10268602B2 (en) | 2016-09-29 | 2019-04-23 | Micron Technology, Inc. | System and method for individual addressing |
US10019311B2 (en) | 2016-09-29 | 2018-07-10 | Micron Technology, Inc. | Validation of a symbol response memory |
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 |
US10564877B1 (en) * | 2017-05-24 | 2020-02-18 | Syncsort Incorporated | Methods and apparatus to store and enable a transfer protocol for new file formats for distributed processing and preserve data integrity through distributed storage blocks |
US9996328B1 (en) * | 2017-06-22 | 2018-06-12 | Archeo Futurus, Inc. | Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code |
US10481881B2 (en) | 2017-06-22 | 2019-11-19 | Archeo Futurus, Inc. | Mapping a computer code to wires and gates |
US12099344B2 (en) | 2017-11-03 | 2024-09-24 | R4N63R Capital Llc | Workspace actor selection systems and methods |
CN109683897B (zh) * | 2018-12-29 | 2022-05-10 | 广州华多网络科技有限公司 | 程序处理方法、装置及设备 |
US11296720B2 (en) * | 2020-08-24 | 2022-04-05 | Innogrit Technologies Co., Ltd. | Data compression using reduced numbers of occurrences |
CN113379047B (zh) * | 2021-05-25 | 2024-04-05 | 北京微芯智通科技合伙企业(有限合伙) | 一种实现卷积神经网络处理的系统及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040103265A1 (en) | 2002-10-16 | 2004-05-27 | Akya Limited | Reconfigurable integrated circuit |
US20080140911A1 (en) | 2006-12-08 | 2008-06-12 | Pandya Ashish A | FSA Extension Architecture for Programmable Intelligent Search Memory |
US20080195783A1 (en) | 2005-04-29 | 2008-08-14 | Nxp B.V. | 12c Slave/Master Interface Enhancement Using State Machines |
US20110289284A1 (en) | 2010-05-19 | 2011-11-24 | Won-Seok Jung | Multi-processor device and inter-process communication method thereof |
Family Cites Families (176)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
IL38603A (en) | 1972-01-21 | 1975-10-15 | Bar Lev H | Automatic pattern recognition method and apparatus particularly for optically recognizing alphanumeric characters |
JPS4891935A (ko) | 1972-03-08 | 1973-11-29 | ||
US4011547A (en) | 1972-07-17 | 1977-03-08 | International Business Machines Corporation | Data processor for pattern recognition and the like |
GB1518093A (en) | 1974-10-04 | 1978-07-19 | Mullard Ltd | Mark detection apparatus |
JPS51112236A (en) | 1975-03-28 | 1976-10-04 | Hitachi Ltd | Shape position recognizer unit |
JPS5313840A (en) | 1976-07-23 | 1978-02-07 | Hitachi Ltd | Analogy calculator |
US4204193A (en) | 1978-11-03 | 1980-05-20 | International Business Machines Corporation | Adaptive alignment for pattern recognition system |
US4414685A (en) | 1979-09-10 | 1983-11-08 | Sternberg Stanley R | Method and apparatus for pattern recognition and detection |
US4748674A (en) | 1986-10-07 | 1988-05-31 | The Regents Of The University Of Calif. | Pattern learning and recognition device |
US5014327A (en) | 1987-06-15 | 1991-05-07 | Digital Equipment Corporation | Parallel associative memory having improved selection and decision mechanisms for recognizing and sorting relevant patterns |
US5216748A (en) | 1988-11-30 | 1993-06-01 | Bull, S.A. | Integrated dynamic programming circuit |
US5617574A (en) | 1989-05-04 | 1997-04-01 | Texas Instruments Incorporated | Devices, systems and methods for conditional instructions |
JP2833062B2 (ja) | 1989-10-30 | 1998-12-09 | 株式会社日立製作所 | キャッシュメモリ制御方法とこのキャッシュメモリ制御方法を用いたプロセッサおよび情報処理装置 |
US5028821A (en) | 1990-03-01 | 1991-07-02 | Plus Logic, Inc. | Programmable logic device with programmable inverters at input/output pads |
US5377129A (en) | 1990-07-12 | 1994-12-27 | Massachusetts Institute Of Technology | Particle interaction processing system |
DE69029390T2 (de) | 1990-09-15 | 1997-06-12 | Ibm | Programmierbare Schaltung für eine neurale Logik |
US5287523A (en) | 1990-10-09 | 1994-02-15 | Motorola, Inc. | Method for servicing a peripheral interrupt request in a microcontroller |
AU8966391A (en) | 1990-12-24 | 1992-06-25 | Ball Corporation | System for analysis of embedded computer systems |
US6400996B1 (en) | 1999-02-01 | 2002-06-04 | Steven M. Hoffberg | Adaptive pattern recognition based control system and method |
US5300830A (en) | 1992-05-15 | 1994-04-05 | Micron Semiconductor, Inc. | Programmable logic device macrocell with an exclusive feedback and exclusive external input lines for registered and combinatorial modes using a dedicated product term for control |
US5331227A (en) | 1992-05-15 | 1994-07-19 | Micron Semiconductor, Inc. | Programmable logic device macrocell with an exclusive feedback line and an exclusive external input line |
US5291482A (en) | 1992-07-24 | 1994-03-01 | At&T Bell Laboratories | High bandwidth packet switch |
US5357512A (en) | 1992-12-30 | 1994-10-18 | Intel Corporation | Conditional carry scheduler for round robin scheduling |
US5825921A (en) | 1993-03-19 | 1998-10-20 | Intel Corporation | Memory transfer apparatus and method useful within a pattern recognition system |
US5459798A (en) | 1993-03-19 | 1995-10-17 | Intel Corporation | System and method of pattern recognition employing a multiprocessing pipelined apparatus with private pattern memory |
US5586266A (en) * | 1993-10-15 | 1996-12-17 | International Business Machines Corporation | System and method for adaptive, active monitoring of a serial data stream having a characteristic pattern |
CA2145361C (en) | 1994-03-24 | 1999-09-07 | Martin William Sotheran | Buffer manager |
US20050251638A1 (en) | 1994-08-19 | 2005-11-10 | Frederic Boutaud | Devices, systems and methods for conditional instructions |
JP3345515B2 (ja) | 1994-08-31 | 2002-11-18 | アイワ株式会社 | ピークシフト補正回路およびそれを使用した磁気記録媒体再生装置 |
US5615237A (en) | 1994-09-16 | 1997-03-25 | Transwitch Corp. | Telecommunications framer utilizing state machine |
JPH0887462A (ja) | 1994-09-20 | 1996-04-02 | Fujitsu Ltd | ステートマシン及び通信制御方式 |
US5790531A (en) | 1994-12-23 | 1998-08-04 | Applied Digital Access, Inc. | Method and apparatus for determining the origin of a remote alarm indication signal |
US6279128B1 (en) | 1994-12-29 | 2001-08-21 | International Business Machines Corporation | Autonomous system for recognition of patterns formed by stored data during computer memory scrubbing |
US5794062A (en) | 1995-04-17 | 1998-08-11 | Ricoh Company Ltd. | System and method for dynamically reconfigurable computing using a processing unit having changeable internal hardware organization |
US5659551A (en) | 1995-05-31 | 1997-08-19 | International Business Machines Corporation | Programmable computer system element with built-in self test method and apparatus for repair during power-on |
US5723984A (en) | 1996-06-07 | 1998-03-03 | Advanced Micro Devices, Inc. | Field programmable gate array (FPGA) with interconnect encoding |
US5680640A (en) | 1995-09-01 | 1997-10-21 | Emc Corporation | System for migrating data by selecting a first or second transfer means based on the status of a data element map initialized to a predetermined state |
US5754878A (en) | 1996-03-18 | 1998-05-19 | Advanced Micro Devices, Inc. | CPU with DSP function preprocessor having pattern recognition detector that uses table for translating instruction sequences intended to perform DSP function into DSP macros |
JPH10111862A (ja) | 1996-08-13 | 1998-04-28 | Fujitsu Ltd | 再帰型ニューラルネットワークに基づく時系列解析装置および方法 |
JPH1069459A (ja) | 1996-08-29 | 1998-03-10 | Hitachi Ltd | シリアルインタフェース制御装置およびその制御方法 |
US6034963A (en) | 1996-10-31 | 2000-03-07 | Iready Corporation | Multiple network protocol encoder/decoder and data processor |
JP2940496B2 (ja) | 1996-11-05 | 1999-08-25 | 日本電気株式会社 | パタンマッチング符号化装置及び方法 |
US6317427B1 (en) | 1997-04-24 | 2001-11-13 | Cabletron Systems, Inc. | Method and apparatus for adaptive port buffering |
US6011407A (en) | 1997-06-13 | 2000-01-04 | Xilinx, Inc. | Field programmable gate array with dedicated computer bus interface and method for configuring both |
US6195150B1 (en) | 1997-07-15 | 2001-02-27 | Silverbrook Research Pty Ltd | Pseudo-3D stereoscopic images and output device |
US6097212A (en) | 1997-10-09 | 2000-08-01 | Lattice Semiconductor Corporation | Variable grain architecture for FPGA integrated circuits |
US6041405A (en) | 1997-12-18 | 2000-03-21 | Advanced Micro Devices, Inc. | Instruction length prediction using an instruction length pattern detector |
DE19861088A1 (de) | 1997-12-22 | 2000-02-10 | Pact Inf Tech Gmbh | Verfahren zur Reparatur von integrierten Schaltkreisen |
US6219776B1 (en) | 1998-03-10 | 2001-04-17 | Billions Of Operations Per Second | Merged array controller and processing element |
EP0943995A3 (en) | 1998-03-20 | 2000-12-06 | Texas Instruments Incorporated | Processor having real-time external instruction insertion for debug functions without a debug monitor |
US6151644A (en) | 1998-04-17 | 2000-11-21 | I-Cube, Inc. | Dynamically configurable buffer for a computer network |
US6052766A (en) | 1998-07-07 | 2000-04-18 | Lucent Technologies Inc. | Pointer register indirectly addressing a second register in the processor core of a digital processor |
US9195784B2 (en) | 1998-08-31 | 2015-11-24 | Cadence Design Systems, Inc. | Common shared memory in a verification system |
US7430171B2 (en) | 1998-11-19 | 2008-09-30 | Broadcom Corporation | Fibre channel arbitrated loop bufferless switch circuitry to increase bandwidth without significant increase in cost |
US7899052B1 (en) | 1999-01-27 | 2011-03-01 | Broadcom Corporation | Memory structure for resolving addresses in a packet-based network switch |
US6412057B1 (en) | 1999-02-08 | 2002-06-25 | Kabushiki Kaisha Toshiba | Microprocessor with virtual-to-physical address translation using flags |
US6636483B1 (en) | 1999-02-25 | 2003-10-21 | Fairchild Semiconductor Corporation | Network switch with zero latency flow control |
US6317849B1 (en) | 1999-04-28 | 2001-11-13 | Intel Corporation | Method and apparatus for controlling available capabilities of a device |
JP2000347708A (ja) | 1999-06-02 | 2000-12-15 | Nippon Telegr & Teleph Corp <Ntt> | ニューラルネットよる動的システムの制御方法及び装置及びニューラルネットよる動的システムの制御プログラムを格納した記憶媒体 |
US6880087B1 (en) | 1999-10-08 | 2005-04-12 | Cisco Technology, Inc. | Binary state machine system and method for REGEX processing of a data stream in an intrusion detection system |
WO2001038978A1 (en) | 1999-11-24 | 2001-05-31 | Z-Force Corporation | Configurable state machine driver and methods of use |
US6640262B1 (en) | 1999-12-20 | 2003-10-28 | 3Com Corporation | Method and apparatus for automatically configuring a configurable integrated circuit |
US6625740B1 (en) | 2000-01-13 | 2003-09-23 | Cirrus Logic, Inc. | Dynamically activating and deactivating selected circuit blocks of a data processing integrated circuit during execution of instructions according to power code bits appended to selected instructions |
US6614703B2 (en) | 2000-01-13 | 2003-09-02 | Texas Instruments Incorporated | Method and system for configuring integrated systems on a chip |
US7080359B2 (en) | 2002-01-16 | 2006-07-18 | International Business Machines Corporation | Stack unique signatures for program procedures and methods |
US6240003B1 (en) | 2000-05-01 | 2001-05-29 | Micron Technology, Inc. | DRAM content addressable memory using part of the content as an address |
US6977897B1 (en) | 2000-05-08 | 2005-12-20 | Crossroads Systems, Inc. | System and method for jitter compensation in data transfers |
US6476636B1 (en) | 2000-09-02 | 2002-11-05 | Actel Corporation | Tileable field-programmable gate array architecture |
US6625704B2 (en) | 2001-08-08 | 2003-09-23 | Sangate Systems, Inc. | Data backup method and system using snapshot and virtual tape |
WO2003039001A1 (en) | 2001-10-29 | 2003-05-08 | Leopard Logic, Inc. | Programmable interface for field programmable gate array cores |
US7333580B2 (en) | 2002-01-28 | 2008-02-19 | Broadcom Corporation | Pipelined parallel processing of feedback loops in a digital circuit |
US6925510B2 (en) | 2002-02-22 | 2005-08-02 | Winbond Electronics, Corp. | Peripheral or memory device having a combined ISA bus and LPC bus |
US7093023B2 (en) * | 2002-05-21 | 2006-08-15 | Washington University | Methods, systems, and devices using reprogrammable hardware for high-speed processing of streaming data to find a redefinable pattern and respond thereto |
US7146643B2 (en) | 2002-10-29 | 2006-12-05 | Lockheed Martin Corporation | Intrusion detection accelerator |
US7349416B2 (en) | 2002-11-26 | 2008-03-25 | Cisco Technology, Inc. | Apparatus and method for distributing buffer status information in a switching fabric |
US7292572B2 (en) | 2002-12-11 | 2007-11-06 | Lsi Corporation | Multi-level register bank based configurable ethernet frame parser |
US7089352B2 (en) | 2002-12-23 | 2006-08-08 | Micron Technology, Inc. | CAM modified to be used for statistic calculation in network switches and routers |
US6944710B2 (en) | 2002-12-30 | 2005-09-13 | Micron Technology, Inc. | Multiple category CAM |
US6880146B2 (en) | 2003-01-31 | 2005-04-12 | Hewlett-Packard Development Company, L.P. | Molecular-wire-based restorative multiplexer, and method for constructing a multiplexer based on a configurable, molecular-junction-nanowire crossbar |
US7305047B1 (en) | 2003-03-12 | 2007-12-04 | Lattice Semiconductor Corporation | Automatic lane assignment for a receiver |
US7366352B2 (en) | 2003-03-20 | 2008-04-29 | International Business Machines Corporation | Method and apparatus for performing fast closest match in pattern recognition |
US7093062B2 (en) * | 2003-04-10 | 2006-08-15 | Micron Technology, Inc. | Flash memory data bus for synchronous burst read page |
US7366854B2 (en) * | 2003-05-08 | 2008-04-29 | Hewlett-Packard Development Company, L.P. | Systems and methods for scheduling memory requests utilizing multi-level arbitration |
CA2526467C (en) | 2003-05-20 | 2015-03-03 | Kagutech Ltd. | Digital backplane recursive feedback control |
US7010639B2 (en) | 2003-06-12 | 2006-03-07 | Hewlett-Packard Development Company, L.P. | Inter integrated circuit bus router for preventing communication to an unauthorized port |
US6906938B2 (en) | 2003-08-15 | 2005-06-14 | Micron Technology, Inc. | CAM memory architecture and a method of forming and operating a device according to a CAM memory architecture |
DE102004045527B4 (de) | 2003-10-08 | 2009-12-03 | Siemens Ag | Konfigurierbare Logikschaltungsanordnung |
US7860915B2 (en) | 2003-12-29 | 2010-12-28 | Xilinx, Inc. | Digital signal processing circuit having a pattern circuit for determining termination conditions |
US7849119B2 (en) | 2003-12-29 | 2010-12-07 | Xilinx, Inc. | Digital signal processing circuit having a pattern detector circuit |
US7487542B2 (en) | 2004-01-14 | 2009-02-03 | International Business Machines Corporation | Intrusion detection using a network processor and a parallel pattern detection engine |
US7243165B2 (en) | 2004-01-14 | 2007-07-10 | International Business Machines Corporation | Parallel pattern detection engine |
GB0415850D0 (en) | 2004-07-15 | 2004-08-18 | Imagination Tech Ltd | Memory management system |
US7716455B2 (en) | 2004-12-03 | 2010-05-11 | Stmicroelectronics, Inc. | Processor with automatic scheduling of operations |
US7176717B2 (en) | 2005-01-14 | 2007-02-13 | Velogix, Inc. | Programmable logic and routing blocks with dedicated lines |
US7358761B1 (en) | 2005-01-21 | 2008-04-15 | Csitch Corporation | Versatile multiplexer-structures in programmable logic using serial chaining and novel selection schemes |
US7392229B2 (en) | 2005-02-12 | 2008-06-24 | Curtis L. Harris | General purpose set theoretic processor |
US7499464B2 (en) | 2005-04-06 | 2009-03-03 | Robert Ayrapetian | Buffered crossbar switch with a linear buffer to port relationship that supports cells and packets of variable size |
JP2008539498A (ja) * | 2005-04-29 | 2008-11-13 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 単一のi2cデータストリームからの並列i2cスレーブデバイスのプログラミング |
US7672529B2 (en) | 2005-05-10 | 2010-03-02 | Intel Corporation | Techniques to detect Gaussian noise |
US7276934B1 (en) | 2005-06-14 | 2007-10-02 | Xilinx, Inc. | Integrated circuit with programmable routing structure including diagonal interconnect lines |
US7804719B1 (en) | 2005-06-14 | 2010-09-28 | Xilinx, Inc. | Programmable logic block having reduced output delay during RAM write processes when programmed to function in RAM mode |
US20080126690A1 (en) | 2006-02-09 | 2008-05-29 | Rajan Suresh N | Memory module with memory stack |
US7376782B2 (en) | 2005-06-29 | 2008-05-20 | Intel Corporation | Index/data register pair for indirect register access |
JP4410162B2 (ja) * | 2005-07-05 | 2010-02-03 | 富士通株式会社 | リコンフィギュアブルlsi |
US7358872B2 (en) | 2005-09-01 | 2008-04-15 | Micron Technology, Inc. | Method and apparatus for converting parallel data to serial data in high speed applications |
FR2891075B1 (fr) | 2005-09-21 | 2008-04-04 | St Microelectronics Sa | Circuit de memoire pour automate de reconnaissance de caracteres de type aho-corasick et procede de memorisation de donnees dans un tel circuit |
US7750675B2 (en) | 2005-12-23 | 2010-07-06 | International Business Machines Corporation | Method for running state machines |
US7360063B2 (en) | 2006-03-02 | 2008-04-15 | International Business Machines Corporation | Method for SIMD-oriented management of register maps for map-based indirect register-file access |
US7512634B2 (en) | 2006-06-05 | 2009-03-31 | Tarari, Inc. | Systems and methods for processing regular expressions |
US7447107B2 (en) | 2006-06-15 | 2008-11-04 | Qimonda North America Corp. | Random access memory including multiple state machines |
US7725510B2 (en) | 2006-08-01 | 2010-05-25 | Alcatel-Lucent Usa Inc. | Method and system for multi-character multi-pattern pattern matching |
US8074022B2 (en) * | 2006-09-28 | 2011-12-06 | Virident Systems, Inc. | Programmable heterogeneous memory controllers for main memory with different memory modules |
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 |
US7890923B2 (en) | 2006-12-01 | 2011-02-15 | International Business Machines Corporation | Configurable pattern detection method and apparatus |
KR100866604B1 (ko) | 2007-01-23 | 2008-11-03 | 삼성전자주식회사 | 전원제어 장치 및 전원제어 방법 |
US7797521B2 (en) | 2007-04-12 | 2010-09-14 | International Business Machines Corporation | Method, system, and computer program product for path-correlated indirect address predictions |
KR20080097573A (ko) | 2007-05-02 | 2008-11-06 | 삼성전자주식회사 | 가상 메모리 접근 방법 |
US20080320053A1 (en) | 2007-06-21 | 2008-12-25 | Michio Iijima | Data management method for accessing data storage area based on characteristic of stored data |
US8397014B2 (en) | 2008-02-04 | 2013-03-12 | Apple Inc. | Memory mapping restore and garbage collection operations |
US7886089B2 (en) | 2008-02-13 | 2011-02-08 | International Business Machines Corporation | Method, system and computer program product for enhanced shared store buffer management scheme for differing buffer sizes with limited resources for optimized performance |
JPWO2009104324A1 (ja) | 2008-02-22 | 2011-06-16 | 日本電気株式会社 | 能動計量学習装置、能動計量学習方法およびプログラム |
US7735045B1 (en) | 2008-03-12 | 2010-06-08 | Xilinx, Inc. | Method and apparatus for mapping flip-flop logic onto shift register logic |
US8015530B1 (en) | 2008-08-05 | 2011-09-06 | Xilinx, Inc. | Method of enabling the generation of reset signals in an integrated circuit |
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 |
US9639493B2 (en) | 2008-11-05 | 2017-05-02 | Micron Technology, Inc. | Pattern-recognition processor with results buffer |
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 |
US20100118425A1 (en) | 2008-11-11 | 2010-05-13 | Menachem Rafaelof | Disturbance rejection in a servo control loop using pressure-based disc mode sensor |
US9164945B2 (en) | 2008-12-01 | 2015-10-20 | Micron Technology, Inc. | Devices, systems, and methods to synchronize parallel processing of a single data stream |
US10007486B2 (en) | 2008-12-01 | 2018-06-26 | Micron Technology, Inc. | Systems and methods to enable identification of different data sets |
US9348784B2 (en) | 2008-12-01 | 2016-05-24 | Micron Technology, Inc. | Systems and methods for managing endian mode of a device |
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 |
DE102008060719B4 (de) | 2008-12-05 | 2018-09-20 | Siemens Healthcare Gmbh | Verfahren zur Steuerung des Aufnahmebetriebs einer Magnetresonanzeinrichtung bei der Aufnahme von Magnetresonanzdaten eines Patienten sowie zugehörige Magnetresonanzeinrichtung |
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 |
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 |
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 |
US8146040B1 (en) | 2009-06-11 | 2012-03-27 | Xilinx, Inc. | Method of evaluating an architecture for an integrated circuit device |
US20100325352A1 (en) | 2009-06-19 | 2010-12-23 | Ocz Technology Group, Inc. | Hierarchically structured mass storage device and method |
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 |
US8159900B2 (en) | 2009-08-06 | 2012-04-17 | Unisyn Medical Technologies, Inc. | Acoustic system quality assurance and testing |
US9323994B2 (en) * | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
US9501705B2 (en) | 2009-12-15 | 2016-11-22 | Micron Technology, Inc. | Methods and apparatuses for reducing power consumption in a pattern recognition processor |
US8489534B2 (en) | 2009-12-15 | 2013-07-16 | Paul D. Dlugosch | Adaptive content inspection |
US20110161620A1 (en) | 2009-12-29 | 2011-06-30 | Advanced Micro Devices, Inc. | Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices |
US8615629B2 (en) | 2010-01-18 | 2013-12-24 | Marvell International Ltd. | Access scheduler |
US20110208900A1 (en) | 2010-02-23 | 2011-08-25 | Ocz Technology Group, Inc. | Methods and systems utilizing nonvolatile memory in a computer system main memory |
JP5477810B2 (ja) * | 2010-03-12 | 2014-04-23 | 沖電気工業株式会社 | 信号処理装置及びプログラム |
GB2478727B (en) | 2010-03-15 | 2013-07-17 | Advanced Risc Mach Ltd | Translation table control |
US8601013B2 (en) | 2010-06-10 | 2013-12-03 | Micron Technology, Inc. | Analyzing data using a hierarchical structure |
US8766666B2 (en) * | 2010-06-10 | 2014-07-01 | Micron Technology, Inc. | Programmable device, hierarchical parallel machines, and methods for providing state information |
US9195623B2 (en) | 2010-06-23 | 2015-11-24 | International Business Machines Corporation | Multiple address spaces per adapter with address translation |
US8294490B1 (en) | 2010-10-01 | 2012-10-23 | Xilinx, Inc. | Integrated circuit and method of asynchronously routing data in an integrated circuit |
US8726253B2 (en) | 2011-01-25 | 2014-05-13 | Micron Technology, Inc. | Method and apparatus for compiling regular expressions |
EP2668577B1 (en) | 2011-01-25 | 2019-08-14 | Micron Technology, INC. | Unrolling quantifications to control in-degree and/or out degree of automaton |
JP5763784B2 (ja) | 2011-01-25 | 2015-08-12 | マイクロン テクノロジー, インク. | 要素利用のための状態のグループ化 |
US8843911B2 (en) | 2011-01-25 | 2014-09-23 | Micron Technology, Inc. | Utilizing special purpose elements to implement a FSM |
US8648621B2 (en) * | 2011-12-15 | 2014-02-11 | Micron Technology, Inc. | Counter operation 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 |
US8680888B2 (en) | 2011-12-15 | 2014-03-25 | Micron Technologies, Inc. | Methods and systems for routing in a state machine |
US8593175B2 (en) * | 2011-12-15 | 2013-11-26 | Micron Technology, Inc. | Boolean logic in a state machine lattice |
US8782624B2 (en) * | 2011-12-15 | 2014-07-15 | Micron Technology, Inc. | Methods and systems for detection in a state machine |
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 |
US8536896B1 (en) | 2012-05-31 | 2013-09-17 | Xilinx, Inc. | Programmable interconnect element and method of implementing a programmable interconnect element |
US9304968B2 (en) | 2012-07-18 | 2016-04-05 | Micron Technology, Inc. | Methods and devices for programming 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 |
US9235798B2 (en) | 2012-07-18 | 2016-01-12 | Micron Technology, Inc. | Methods and systems for handling data received by 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 |
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 |
-
2013
- 2013-10-28 US US14/065,168 patent/US9448965B2/en active Active
-
2014
- 2014-03-11 WO PCT/US2014/023589 patent/WO2014150554A1/en active Application Filing
- 2014-03-11 CN CN201480015637.6A patent/CN105051711B/zh active Active
- 2014-03-11 KR KR1020157027385A patent/KR102168930B1/ko active IP Right Grant
- 2014-03-11 EP EP14767978.1A patent/EP2972920B1/en active Active
- 2014-03-11 CN CN201911004643.2A patent/CN110825464B/zh active Active
- 2014-03-11 JP JP2016501291A patent/JP6177418B2/ja active Active
- 2014-03-14 TW TW103109469A patent/TWI625631B/zh active
-
2016
- 2016-09-06 US US15/257,677 patent/US9747242B2/en active Active
-
2017
- 2017-08-22 US US15/683,649 patent/US10067901B2/en active Active
-
2018
- 2018-08-02 US US16/053,562 patent/US10372653B2/en active Active
-
2019
- 2019-07-23 US US16/519,921 patent/US10606787B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040103265A1 (en) | 2002-10-16 | 2004-05-27 | Akya Limited | Reconfigurable integrated circuit |
US20080195783A1 (en) | 2005-04-29 | 2008-08-14 | Nxp B.V. | 12c Slave/Master Interface Enhancement Using State Machines |
US20080140911A1 (en) | 2006-12-08 | 2008-06-12 | Pandya Ashish A | FSA Extension Architecture for Programmable Intelligent Search Memory |
US20110289284A1 (en) | 2010-05-19 | 2011-11-24 | Won-Seok Jung | Multi-processor device and inter-process communication method thereof |
Also Published As
Publication number | Publication date |
---|---|
CN110825464A (zh) | 2020-02-21 |
KR20150132226A (ko) | 2015-11-25 |
TWI625631B (zh) | 2018-06-01 |
EP2972920A1 (en) | 2016-01-20 |
US10372653B2 (en) | 2019-08-06 |
US10067901B2 (en) | 2018-09-04 |
US9448965B2 (en) | 2016-09-20 |
CN110825464B (zh) | 2024-07-02 |
US20190347233A1 (en) | 2019-11-14 |
WO2014150554A1 (en) | 2014-09-25 |
JP6177418B2 (ja) | 2017-08-09 |
US10606787B2 (en) | 2020-03-31 |
US9747242B2 (en) | 2017-08-29 |
TW201506632A (zh) | 2015-02-16 |
EP2972920A4 (en) | 2016-11-23 |
US20170351631A1 (en) | 2017-12-07 |
CN105051711B (zh) | 2019-11-15 |
JP2016515266A (ja) | 2016-05-26 |
US20160371215A1 (en) | 2016-12-22 |
US20140279776A1 (en) | 2014-09-18 |
US20180341612A1 (en) | 2018-11-29 |
EP2972920B1 (en) | 2022-07-20 |
CN105051711A (zh) | 2015-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102168930B1 (ko) | 상태 머신 엔진에 의해 수신된 데이터를 제공하기 위한 방법 및 장치 | |
US11741014B2 (en) | Methods and systems for handling data received by a state machine engine | |
US9454322B2 (en) | Results generation for state machine engines | |
KR101922762B1 (ko) | 상태 머신 엔진을 프로그래밍하기 위한 방법 및 디바이스 | |
CN107609644B (zh) | 用于状态机中的数据分析的方法及系统 | |
CN118860936A (zh) | 用于提供由状态机引擎接收的数据的方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right |