KR20150036166A - 상태 머신 엔진을 프로그래밍하기 위한 방법 및 디바이스 - Google Patents
상태 머신 엔진을 프로그래밍하기 위한 방법 및 디바이스 Download PDFInfo
- Publication number
- KR20150036166A KR20150036166A KR1020157001784A KR20157001784A KR20150036166A KR 20150036166 A KR20150036166 A KR 20150036166A KR 1020157001784 A KR1020157001784 A KR 1020157001784A KR 20157001784 A KR20157001784 A KR 20157001784A KR 20150036166 A KR20150036166 A KR 20150036166A
- Authority
- KR
- South Korea
- Prior art keywords
- state machine
- data
- lattice
- buffer
- machine engine
- Prior art date
Links
Images
Classifications
-
- 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/04—Architecture, e.g. interconnection topology
-
- 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
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/04—Programme control other than numerical control, i.e. in sequence controllers or logic controllers
- G05B19/045—Programme control other than numerical control, i.e. in sequence controllers or logic controllers using logic state machines, consisting only of a memory or a programmable logic device containing the logic for the controlled machine and in which the state of its outputs is dependent on the state of its inputs or part of its own output states, e.g. binary decision controllers, finite state controllers
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Automation & Control Theory (AREA)
- Logic Circuits (AREA)
- Multi Processors (AREA)
- Advance Control (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Image Processing (AREA)
Abstract
프로그램 버퍼를 갖는 상태 머신 엔진. 프로그램 버퍼는 상태 머신 래티스를 구성하기 위해 버스 인터페이스를 통하여 구성 데이터를 수신하도록 구성된다. 상태 머신 엔진은 또한 버스 인터페이스를 통하여 외부 디바이스에 복구 맵 데이터를 제공하도록 구성된 복구 맵 버퍼를 포함한다. 상태 머신 래티스는 다수의 프로그래밍가능 엘리먼트를 포함한다. 각각의 프로그래밍가능 엘리먼트는 데이터를 분석하고 분석의 결과를 출력하도록 구성된 다수의 메모리 셀을 포함한다.
Description
본 발명의 실시예는 일반적으로는 전자 디바이스에 관한 것으로, 더 구체적으로, 소정 실시예에서는, 데이터 분석을 위한 병렬 디바이스를 갖는 전자 디바이스에 관한 것이다.
복잡한 데이터 분석(예를 들어, 패턴 인식)은 관용적 폰 노이만(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은, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진에서 FSM 래티스를 프로그래밍하기 위한 방법을 예시하는 순서도.
도 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은, 본 발명의 다양한 실시예에 따라, 상태 머신 엔진에서 FSM 래티스를 프로그래밍하기 위한 방법을 예시하는 순서도.
이제 도면을 보면, 도 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) 래티스(예를 들어, 칩 코어)를 포함할 수 있다. 본 출원의 목적으로, 용어 "래티스"는 엘리먼트(예를 들어, 불 셀, 카운터 셀, 상태 머신 엘리먼트, 상태 이행 엘리먼트)의 조직화된 프레임워크(예를 들어, 라우팅 매트릭스, 라우팅 네트워크, 프레임)를 가리킨다. 더욱, "래티스"는 어떠한 적합한 형상, 구조 또는 계층적 조직(예를 들어, 그리드, 큐브, 구, 캐스케이딩)이라도 가질 수 있다. 각각의 FSM 래티스는 동일한 데이터를 병렬로 각각 수신 및 분석하는 다수의 FSM을 구현할 수 있다. 더욱, FSM 래티스는, FSM 래티스의 클러스터가 동일한 입력 데이터를 병렬로 분석할 수 있게 되도록, 그룹(예를 들어, 클러스터)으로 배열될 수 있다. 더욱, 상태 머신 엔진(14)의 FSM 래티스의 클러스터는 계층적 구조로 배열될 수 있으며, 여기서는 계층적 구조의 하위 레벨 상의 상태 머신 래티스로부터의 출력이 상위 레벨 상의 상태 머신 래티스로의 입력으로서 사용될 수 있다. 계층적 구조를 통해 직렬로 상태 머신 엔진(14)의 병렬 FSM 래티스의 클러스터를 캐스케이딩함으로써, 점점 복잡한 패턴이 분석(예를 들어, 평가, 검색 등)될 수 있다.
더욱, 상태 머신 엔진(14)의 계층적 병렬 구성에 기반하여, 상태 머신 엔진(14)은 높은 프로세싱 속도를 이용하는 시스템에서 복잡한 데이터 분석(예를 들어, 패턴 인식)을 위해 채용될 수 있다. 예를 들면, 여기에서 설명되는 실시예는 1 GByte/sec의 프로세싱 속도를 갖는 시스템에 편입될 수 있다. 따라서, 상태 머신 엔진(14)을 이용하여, 고속 메모리 디바이스 또는 다른 외부 디바이스로부터의 데이터가 급속하게 분석될 수 있다. 상태 머신 엔진(14)은, 예를 들어 단일 디바이스 사이클 동안, 대략 동시에 수개의 기준(예를 들어, 검색 용어)에 따라 데이터 스트림을 분석할 수 있다. 어느 레벨의 상태 머신 엔진(14) 상의 FSM의 클러스터 내 FSM 래티스의 각각은 대략 동시에 데이터 스트림으로부터 동일한 검색 용어를 각각 수신할 수 있고, 병렬 FSM 래티스의 각각은 그 용어가 프로세싱 기준 내 다음 상태로 상태 머신 엔진(14)을 전진시키는지 결정할 수 있다. 상태 머신 엔진(14)은 비교적 다수의, 예를 들어, 100 초과, 110 초과 또는 10,000 초과의 기준에 따라 용어를 분석할 수 있다. 그들은 병렬로 동작하기 때문에, 그들은, 데이터 스트림을 느리게 함이 없이, 비교적 높은 대역폭을 갖는 데이터 스트림, 예를 들어, 1 GByte/sec보다 크거나 일반적으로 같은 데이터 스트림에 기준을 적용할 수 있다.
일 실시예에 있어서, 상태 머신 엔진(14)은 데이터 스트림 내 막대한 수의 패턴을 인식(예를 들어, 검출)하도록 구성될 수 있다. 예를 들면, 상태 머신 엔진(14)은 사용자 또는 다른 엔티티가 분석하기를 바랄 수 있는 각종 유형의 데이터 스트림 중 하나 이상 내 패턴을 검출하도록 이용될 수 있다. 예를 들어, 상태 머신 엔진(14)은 인터넷을 통해 수신되는 패킷 또는 셀룰러 네트워크를 통해 수신되는 데이터와 같이, 네트워크를 통해 수신되는 데이터 스트림을 분석하도록 구성될 수 있다. 일례에 있어서, 상태 머신 엔진(14)은 스팸 또는 멀웨어를 찾도록 데이터 스트림을 분석하도록 구성될 수 있다. 데이터 스트림은, 데이터가 일시적으로, 사전식으로 또는 의미상으로 중요한 순서로 등, 의미를 갖는 순서로 수신되는 직렬 데이터 스트림으로서 수신될 수 있다. 대안으로, 데이터 스트림은 병렬로 또는 순서 없이 수신되고, 그 후, 예를 들어 인터넷을 통해 수신된 패킷의 순서를 재정렬함으로써 직렬 데이터 스트림으로 변환될 수 있다. 일부 실시예에 있어서, 데이터 스트림은 용어를 직렬로 제시할 수 있지만, 용어의 각각을 표현하는 비트는 병렬로 수신될 수 있다. 데이터 스트림은 시스템(10) 외부의 소스로부터 수신될 수도 있으며, 메모리(16)와 같은 메모리 디바이스에 질문하고 메모리(16)에 저장된 데이터로부터 데이터 스트림을 형성함으로써 형성될 수도 있다. 다른 예에 있어서, 상태 머신 엔진(14)은 어떤 단어를 철자하는 문자 시퀀스, 유전자를 지정하는 유전 염기 쌍 시퀀스, 이미지의 일부분을 형성하는 화상 또는 비디오 파일 내 비트 시퀀스, 프로그램의 일부분을 형성하는 실행가능한 파일 내 비트 시퀀스, 또는 노래 또는 구어의 일부분을 형성하는 오디오 파일 내 비트 시퀀스를 인식하도록 구성될 수 있다. 분석될 데이터 스트림은 2진 포맷 또는 다른 포맷, 예를 들어, 10진, ASCII 등의 다수의 데이터 비트를 포함할 수 있다. 스트림은 단일 디지트 또는 다수 디지트, 예를 들어, 수개의 2진 디지트로 데이터를 인코딩할 수 있다.
인식될 바와 같이, 시스템(10)은 메모리(16)를 포함할 수 있다. 메모리(16)는 동적 램(Dynamic Random Access Memory: DRAM), 정적 램(Static Random Access Memory: SRAM), 동기식 DRAM(Synchronous DRAM: SDRAM), 더블 데이터 레이트 DRAM(Double Data Rate DRAM: DDR SDRAM), DDR2 SDRAM, DDR3 SDRAM 등과 같은 휘발성 메모리를 포함할 수 있다. 메모리(16)는 또한 휘발성 메모리와 함께 사용될, 롬(read-only memory: ROM), PC-RAM, SONOS(silicon-oxide-nitride-oxide-silicon) 메모리, MONOS(metal-oxide-nitride -oxide-silicon) 메모리, 폴리실리콘 부동 게이트 기반 메모리, 및/또는 다양한 아키텍처의 다른 유형의 플래시 메모리(예를 들어, NAND 메모리, NOR 메모리 등)와 같은, 비-휘발성 메모리를 포함할 수 있다. 메모리(16)는 상태 머신 엔진(14)에 의해 분석될 데이터를 제공할 수 있는, DRAM 디바이스와 같은, 하나 이상의 메모리 디바이스를 포함할 수 있다. 여기에서 사용되는 바와 같이, 용어 "제공"은 지시, 입력, 삽입, 보내기, 전송, 송신, 발생, 부여, 출력, 배치, 쓰기 등을 총칭하여 가리킬 수 있다. 그러한 디바이스는 솔리드 스테이트 드라이브(solid state drive: SSD)들, 멀티미디어 미디어 카드(MultimediaMediaCard: MMC)들, 시큐어 디지털(SecureDigital: SD) 카드, 콤팩트 플래시(CompactFlash: CF) 카드 또는 어떠한 다른 적합한 디바이스라도 포함할 수 있거나 지칭될 수 있다. 더욱, 그러한 디바이스는 범용 직렬 버스(Universal Serial Bus: USB), 주변 컴포넌트 상호접속(Peripheral Component Interconnect: PCI), PCI 익스프레스(PCI Express: PCI-E), 소형 컴퓨터 시스템 인터페이스(Small Computer System Interface: 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 및/또는 오디오 디스플레이를 포함할 수 있다. 시스템은 또한, 인터넷과 같은 네트워크와 인터페이싱하기 위해, 네트워크 인터페이스 카드(Network Interface Card: NIC)와 같은, 네트워크 인터페이스 디바이스(26)를 포함할 수 있다. 인식될 바와 같이, 시스템(10)은, 시스템(10)의 애플리케이션에 의존하여, 많은 다른 컴포넌트를 포함할 수 있다.
도 2 내지 도 5는 FSM 래티스(30)의 일례를 도시하고 있다. 일례에 있어서, FSM 래티스(30)는 블록(32)의 어레이를 포함한다. 설명될 바와 같이, 각각의 블록(32)은 FSM 내 복수의 상태에 대응하는 복수의 선택적으로 결합-가능한 하드웨어 엘리먼트(예를 들어, 구성가능 엘리먼트 및/또는 특수 목적 엘리먼트)를 포함할 수 있다. FSM 내 상태에 유사하게, 하드웨어 엘리먼트는 입력 스트림을 분석하고, 입력 스트림에 기반하여, 하류측 하드웨어 엘리먼트를 활성화할 수 있다.
구성가능 엘리먼트는 많은 다른 기능을 구현하도록 구성(예를 들어, 프로그래밍)될 수 있다. 예를 들면, 구성가능 엘리먼트는 행(38)(도 3 및 도 4에 도시됨) 및 블록(32)(도 2 및 도 3에 도시됨)으로 계층적으로 조직되는 상태 머신 엘리먼트(state machine element: SME)(34, 36)(도 5에 도시됨)들을 포함할 수 있다. SME들은 또한 상태 이행 엘리먼트(state transition element: 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의 그룹(groups of two: 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)의 전반부는 행(38) 내 SME(34, 36)의 전반부(각각의 GOT(60)로부터의 하나의 SME(34))에 결합할 수 있고, 제2 복수의 행 상호접속 도체(70)의 후반부는 행(38) 내 SME(34, 36)의 후반부(각각의 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)은, 하이 또는 로우 값(예를 들어, 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)의 구성을 위한 복수의 비트로 변환될 수 있다. 복수의 비트는 여기서는 이미지라고 지칭된다.
블록(124)에서, 이미지는 컴파일러(20)에 의해 발행된다. 이미지는 FSM 래티스(30)의 특정 하드웨어 엘리먼트를 구성하기 위한 복수의 비트를 포함한다. 이미지가 복수의 비트(예를 들어, 0 및 1)를 포함하는 실시예에 있어서, 이미지는 2진 이미지라고 지칭될 수 있다. 비트는, 프로그래밍된 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) 인터페이스, 기가비트 미디어 독립 인터페이스(GMMI) 등과 같이, 데이터 소스에 그리고 그로부터 상태 머신 엔진(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 KByte일 수 있다. 명령어 버퍼(133)는, 분석될 데이터에 대응하는 명령어 및 상태 머신 엔진(14)을 구성하는 것에 대응하는 명령어와 같이, 버스 인터페이스(130)를 통하여 프로세서(12)로부터 명령어를 수신하도록 구성된다. IR 버스 및 프로세스 버퍼 인터페이스(136)는 프로세스 버퍼(134)에 데이터를 제공하는 것을 용이하게 할 수 있다. IR 버스 및 프로세스 버퍼 인터페이스(136)는 데이터가 FSM 래티스(30)에 의해 순서대로 프로세싱됨을 보장하도록 사용될 수 있다. IR 버스 및 프로세스 버퍼 인터페이스(136)는 데이터가 올바르게 수신 및 분석되게 되도록 데이터, 타이밍 데이터, 패킹 명령어 등의 교환을 조정할 수 있다. 일반적으로, IR 버스 및 프로세스 버퍼 인터페이스(136)는 FSM 래티스(30)의 논리 랭크를 통해 병렬로 다수의 데이터 세트의 분석을 허용한다. 예를 들어, 다수의 물리 디바이스(예를 들어, 상태 머신 엔진(14), 칩, 별개 디바이스)는 랭크로 배열될 수 있고 IR 버스 및 프로세스 버퍼 인터페이스(136)를 통하여 서로에 데이터를 제공할 수 있다. 본 출원의 목적으로, 용어 "랭크"는 동일 칩 선택에 접속된 상태 머신 엔진(14)의 세트를 지칭한다. 도시된 실시예에 있어서, IR 버스 및 프로세스 버퍼 인터페이스(136)는 32 비트 데이터 버스를 포함할 수 있다. 다른 실시예에 있어서, IR 버스 및 프로세스 버퍼 인터페이스(136)는 128 비트 데이터 버스와 같이 어떠한 적합한 데이터 버스라도 포함할 수 있다.
도시된 실시예에 있어서, 상태 머신 엔진(14)은 또한 상태 머신 엔진(14)을 통해 상태 벡터 데이터를 제공하는데 도움을 주기 위해 압축해제기(138) 및 압축기(140)를 포함한다. 압축기(140) 및 압축해제기(138)는 상태 벡터 데이터가 데이터 제공 시간을 최소화하도록 압축될 수 있게 되도록 함께 작업한다. 상태 벡터 데이터를 압축함으로써, 버스 이용 시간이 최소화될 수 있다. 압축기(140) 및 압축해제기(138)는 또한 변하는 버스트 길이의 상태 벡터 데이터를 취급하도록 구성될 수 있다. 압축된 상태 벡터 데이터를 패딩하고 각각의 압축된 영역이 종료할 때에 관한 표시자를 포함시킴으로써, 압축기(140)는 상태 머신 엔진(14)을 통해 전반적 프로세싱 속도를 개선할 수 있다. 압축기(140)는 FSM 래티스(30)에 의한 분석 후에 매치 결과 데이터를 압축하도록 사용될 수 있다. 압축기(140) 및 압축해제기(138)는 또한 구성 데이터를 압축 및 압축해제하도록 사용될 수 있다. 일 실시예에 있어서, 압축기(140) 및 압축해제기(138)는 압축기(140) 및 압축해제기(138) 내/외로 흐르는 데이터가 수정되지 않게 되도록 불가능으로 될 수 있다(예를 들어, 꺼질 수 있다).
앞서 설명된 바와 같이, FSM 래티스(30)의 출력은 상태 벡터를 포함할 수 있다. 상태 벡터는 FSM 래티스(30)의 SME(34, 36)의 상태(예를 들어, 활성화됨 또는 활성화되지 않음) 및 카운터(58)의 동적(예를 들어, 현재) 카운트를 포함한다. 상태 머신 엔진(14)은 상태 벡터 캐시 메모리(142), 상태 벡터 메모리 버퍼(144), 상태 벡터 중간 입력 버퍼(146) 및 상태 벡터 중간 출력 버퍼(148)를 갖는 상태 벡터 시스템(141)을 포함한다. 상태 벡터 시스템(141)은 FSM 래티스(30)의 다수의 상태 벡터를 저장하도록 그리고 상태 벡터를 FSM 래티스(30)에 제공하여 FSM 래티스(30)를 제공된 상태 벡터에 대응하는 상태로 복원하도록 사용될 수 있다. 예를 들어, 각각의 상태 벡터는 상태 벡터 캐시 메모리(142)에 임시 저장될 수 있다. 즉, 각각의 SME(34, 36)의 상태는 상태가 추후 시간에 복원되어 추가적 분석에 사용될 수 있게 되도록 저장될 수 있는 한편, 새로운 데이터 세트(예를 들어, 검색 용어)의 추가적 분석을 위해 SME(34, 36)를 자유롭게 할 수 있다. 전형적 캐시처럼, 상태 벡터 캐시 메모리(142)는 예를 들면 여기에서는 FSM 래티스(30)에 의한 신속한 검색 및 사용을 위해 상태 벡터의 저장을 가능하게 한다. 도시된 실시예에 있어서, 상태 벡터 캐시 메모리(142)는 512 상태 벡터까지 저장할 수 있다.
인식될 바와 같이, 상태 벡터 데이터는 랭크 내 서로 다른 상태 머신 엔진(14)(예를 들어, 칩) 간 교환될 수 있다. 상태 벡터 데이터는 상태 머신 엔진(14)의 FSM 래티스(30)의 SME(34, 36)의 상태를 동기화하기 위해, 다수의 상태 머신 엔진(14)을 가로질러 동일 기능을 수행하기 위해, 다수의 상태 머신 엔진(14)을 가로질러 결과를 재생하기 위해, 다수의 상태 머신 엔진(14)을 가로질러 결과를 캐스케이딩하기 위해, 다수의 상태 머신 엔진(14)을 통해 캐스케이딩되는 데이터를 분석하도록 사용되는 SME(34, 36)의 상태의 이력을 저장하기 위해 등등과 같이 다양한 목적으로 서로 다른 상태 머신 엔진(14) 간 교환될 수 있다. 더욱, 상태 머신 엔진(14) 내에서 상태 벡터 데이터는 FSM 래티스(30)의 SME(34, 36)를 신속히 구성하도록 사용될 수 있음을 주목해야 한다. 예를 들어, 상태 벡터 데이터는 SME(34, 36)의 상태를 (예를 들어, 새로운 검색 용어를 찾기 위해) 초기화된 상태로 복원하도록, SME(34, 36)의 상태를 (예를 들어, 이전에 검색된 검색 용어를 찾기 위해) 이전 상태로 복원하도록, 그리고 SME(34, 36)의 상태를 (예를 들어, 캐스케이딩 검색에서 검색 용어를 찾기 위해) 캐스케이딩 구성에 대하여 구성되게 변경하도록 사용될 수 있다. 소정 실시예에 있어서, 상태 벡터 데이터는 (예를 들어, 상태 벡터 데이터의 분석, 수정을 적용하도록 상태 벡터 데이터를 재구성, SME(34, 36)의 효율을 개선하도록 상태 벡터 데이터를 재구성을 위해 등등) 상태 벡터 데이터가 프로세서(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)를 포함할 수 있다. 부가적으로, 프로그램 버퍼 시스템(예를 들어, 복구 맵 및 프로그램 버퍼(156))가 처음에 FSM 래티스(30)를 프로그래밍하도록 제공될 수 있다. 예를 들어, 초기(예를 들어, 시작하는) 상태 벡터 데이터가 (예를 들어, 압축해제기(138)를 통하여) 프로그램 버퍼 시스템으로부터 FSM 래티스(30)에 제공될 수 있다. 압축해제기(138)는 FSM 래티스(30)를 프로그래밍하도록 제공된 구성 데이터(예를 들어, 상태 벡터 데이터, 라우팅 스위치 데이터, SME(34, 36) 상태, 불 함수 데이터, 카운터 데이터, 매치 MUX 데이터)를 압축해제하도록 사용될 수 있다.
유사하게, 복구 맵 버퍼 시스템(예를 들어, 저장 및 복구 맵 버퍼(158))이 또한 셋업 및 용례를 위한 데이터(예를 들어, 저장 및 복구 맵)의 저장을 위해 제공될 수 있다. 복구 맵 버퍼 시스템에 의해 저장된 데이터는, 어느 SME(34, 36)가 복구되었는지를 식별하는 데이터와 같이, 복구된 하드웨어 엘리먼트에 대응하는 데이터를 포함할 수 있다. 복구 맵 버퍼 시스템은 어떠한 적합한 방식이라도 통하여 데이터를 수신할 수 있다. 예를 들어, 데이터는, 최종 제조 시험 동안 디바이스 상에 행해진 복구의 매핑을 제공하는, "퓨즈 맵" 메모리로부터 복구 맵 버퍼(158)에 제공될 수 있다. 다른 일례로서, 복구 맵 버퍼 시스템은 표준 프로그래밍 파일이 복구된 아키텍처를 갖는 FSM 래티스(30)에서 동작할 수 있도록 표준 프로그래밍 파일을 수정(예를 들어, 커스터마이징)하도록 사용되는 데이터를 포함할 수 있다(예를 들어, FSM 래티스(30) 내 불량 SME(34, 36)는 그들이 사용되지 않도록 우회될 수 있다). 압축기(140)는 퓨즈 맵 메모리로부터 복구 맵 버퍼(158)에 제공되는 데이터를 압축하도록 사용될 수 있다. 예시된 바와 같이, 버스 인터페이스(130)는 프로그램 버퍼(156)에 데이터를 제공하도록 그리고 복구 맵 버퍼(158)로부터의 데이터를 제공하도록 사용될 수 있다. 인식될 바와 같이, 프로그램 버퍼(156)에 제공되는 그리고/또는 복구 맵 버퍼(158)로부터 제공되는 데이터는 압축될 수 있다. 일부 실시예에 있어서, 데이터는 버스 인터페이스(130)에 제공되고 그리고/또는 상태 머신 엔진(14)(예를 들어, 프로세서(12), 메모리(16), 컴파일러(20) 등) 외부의 디바이스를 통하여 버스 인터페이스(130)로부터 수신된다. 상태 머신 엔진(14) 외부의 디바이스는 복구 맵 버퍼(158)로부터 제공된 데이터를 수신하도록, 데이터를 저장하도록, 데이터를 분석하도록, 데이터를 수정하도록 그리고/또는 새로운 또는 수정된 데이터를 프로그램 버퍼(156)에 제공하도록 구성될 수 있다.
상태 머신 엔진(14)은 FSM 래티스(30)를 프로그래밍하도록 사용되는 래티스 프로그래밍 시스템(159)을 포함한다. 예시된 바와 같이, 래티스 프로그래밍 시스템(159)은 명령어 큐(133)로부터 데이터(예를 들어, 구성 명령어)를 수신할 수 있다. 더욱, 래티스 프로그래밍 시스템(159)은 프로그램 버퍼(156)로부터 데이터(예를 들어, 구성 데이터)를 수신할 수 있다. 래티스 프로그래밍 시스템(159)은 FSM 래티스(30)를 구성하도록 (예를 들어, 라우팅 스위치, SME(34, 36), 불 셀, 카운터, 매치 MUX를 구성하도록) 구성 명령어 및 구성 데이터를 사용할 수 있다. 래티스 프로그래밍 시스템(159)은 (예를 들어, 프로그램 버퍼(156) 및 복구 맵 버퍼(158)와 교환되는 데이터에 대하여) 데이터를 압축하도록 압축기(140)를 그리고 데이터를 압축하도록 압축해제기(138)를 사용할 수 있다.
이제 도 10을 참조하면, 상태 머신 엔진(14) 내 FSM 래티스(30)를 프로그래밍하기 위한 방법(160)을 보여주는 순서도가 예시되어 있다. 방법(160)은 구성 데이터를 프로그램 버퍼(156)에 제공하는 단계(블록(162)), 구성 명령어를 명령어 버퍼(133)에 제공하는 단계(블록(164)), 구성 업데이트를 개시하는 단계(블록(166)), 명령어 버퍼(133)로부터 명령어를 읽는 단계(블록(168)), 명령어가 구성 명령어인지를 결정하는 단계(블록(170)), 프로그램 버퍼(156)로부터 구성 데이터를 읽고 압축되어 있으면 구성 데이터를 압축해제하는 단계(블록(172)) 및 FSM 래티스(30)에 구성 데이터를 제공하는 단계(블록(174))를 포함할 수 있다.
일 실시예에 있어서, 블록(162)에서는, 프로세서(12)가 버스 인터페이스(130)를 통하여 프로그램 버퍼 시스템(예를 들어, 복원 맵 및 프로그램 버퍼(156))에 구성 데이터를 제공할 수 있다. 더욱, 프로세서(12)는 버스 인터페이스(130)를 통하여 명령어 버퍼(133)에 구성 명령어를 제공할 수 있다(블록(164)). 블록(166)에서는, 구성 업데이트가 (예를 들어, 프로세서(12), 래티스 프로그래밍 시스템(159) 또는 상태 머신 엔진(14)을 통하여) 개시될 수 있다. 그 후, 블록(168)에서는, 래티스 프로그래밍 시스템(159)이 명령어 버퍼(133)에 저장된 명령어를 읽을 수 있다. 다음으로, 블록(170)에서, 래티스 프로그래밍 시스템(159)은 명령어 버퍼(133)로부터 읽힌 명령어가 구성 명령어인지 결정할 수 있다. 명령어가 구성 명령어가 아니면, 블록(168)에서 래티스 프로그래밍 시스템(159)은 명령어 버퍼(133)에 저장된 부가 명령어를 읽는다. 그렇지만, 명령어가 구성 명령어이면, 래티스 프로그래밍 시스템(159)은 프로그램 버퍼 시스템에 저장된 구성 데이터를 읽는다(블록(172)). 일부 실시예에 있어서, 구성 데이터는 압축될 수 있다. 따라서, 블록(172)에서는 또한, 래티스 프로그래밍 시스템(159)이 (예를 들어, 압축해제기(138)를 통하여) 구성 데이터를 압축해제할 수 있다. 그 후 래티스 프로그래밍 시스템(159)은 FSM 래티스(30)에 구성 데이터를 제공한다(블록(174)).
본 발명은 쉽게 다양한 수정 및 대안의 형태가 가능할 수 있기는 하지만, 특정 실시예가 예의 방식으로 도면에서 도시되었고 여기에 상세히 설명되었다. 그렇지만, 본 발명을 개시된 특정 형태로 한정하려는 의도는 아님을 이해해야 한다. 그보다는, 본 발명은 이하의 첨부된 청구범위에 의해 정의되는 바와 같이 본 발명의 취지 및 범위 내에 드는 모든 수정, 균등물 및 대안을 망라하려는 것이다.
Claims (25)
- 상태 머신 엔진으로서,
상태 머신 래티스(state machine lattice)를 구성하기 위해 버스 인터페이스를 통하여 구성 데이터를 수신하도록 구성된 프로그램 버퍼; 및
상기 버스 인터페이스를 통하여 외부 디바이스에 복구 맵 데이터를 제공하도록 구성된 복구 맵 버퍼를 포함하되,
상기 상태 머신 래티스는 복수의 프로그래밍가능 엘리먼트를 포함하며, 각각의 프로그래밍가능 엘리먼트는 데이터를 분석하고 상기 분석의 결과를 출력하도록 구성된 복수의 메모리 셀을 포함하는 것인 상태 머신 엔진. - 제1항에 있어서, 상기 프로그램 버퍼는 압축된 구성 데이터를 수신하도록 구성되는 것인 상태 머신 엔진.
- 제1항에 있어서, 상기 프로그램 버퍼는 압축되지 않은 구성 데이터를 수신하도록 구성되는 것인 상태 머신 엔진.
- 제1항에 있어서, 상기 복구 맵 버퍼는 압축된 복구 맵 데이터를 제공하도록 구성되는 것인 상태 머신 엔진.
- 제1항에 있어서, 상기 복구 맵 버퍼는 압축되지 않은 복구 맵 데이터를 제공하도록 구성되는 것인 상태 머신 엔진.
- 제1항에 있어서, 상기 외부 디바이스는, 상기 복구 맵 버퍼로부터 제공된 복구 맵 데이터를 수신하고, 상기 복구 맵 데이터를 분석하고, 수정된 버전의 구성 데이터를 구축하고, 그리고 상기 수정된 버전의 구성 데이터를 상기 프로그램 버퍼에 제공하도록 구성되는 것인 상태 머신 엔진.
- 제1항에 있어서, 상기 프로그램 버퍼는 상기 상태 머신 래티스를 구성하기 위해 래티스 프로그래밍 시스템에 구성 데이터를 제공하도록 구성되는 것인 상태 머신 엔진.
- 상태 머신 엔진으로서, 상태 머신 래티스를 구성하기 위해 버스 인터페이스를 통하여 구성 데이터를 수신하도록 구성된 프로그램 버퍼를 포함하되, 상기 상태 머신 래티스는 복수의 프로그래밍가능 엘리먼트를 포함하며, 각각의 프로그래밍가능 엘리먼트는 데이터 스트림의 적어도 일부를 분석하고 상기 분석의 결과를 출력하도록 구성된 복수의 메모리 셀을 포함하는 것인 상태 머신 엔진.
- 제8항에 있어서, 상기 프로그램 버퍼는 래티스 프로그래밍 시스템에 구성 데이터를 제공하도록 구성되는 것인 상태 머신 엔진.
- 제9항에 있어서, 상기 래티스 프로그래밍 시스템은 상기 상태 머신 래티스를 구성하기 위해 상기 상태 머신 래티스에 구성 데이터를 제공하도록 구성되는 것인 상태 머신 엔진.
- 제8항에 있어서, 상기 프로그램 버퍼는 래티스 프로그래밍 시스템에 압축된 구성 데이터를 제공하도록 구성되는 것인 상태 머신 엔진.
- 제11항에 있어서, 상기 래티스 프로그래밍 시스템은 상기 압축된 구성 데이터를 수신한 후에 상기 구성 데이터를 압축해제하도록 구성되는 것인 상태 머신 엔진.
- 상태 머신 엔진으로서, 버스 인터페이스를 통하여 외부 디바이스에 상태 머신 래티스로부터 복구 맵 데이터를 제공하도록 구성된 복구 맵 버퍼를 포함하되, 상기 상태 머신 래티스는 복수의 프로그래밍가능 엘리먼트를 포함하며, 각각의 프로그래밍가능 엘리먼트는 데이터 스트림의 적어도 일부를 분석하고 상기 분석의 결과를 출력하도록 구성된 복수의 메모리 셀을 포함하는 것인 상태 머신 엔진.
- 제13항에 있어서, 상기 복구 버퍼는 래티스 프로그래밍 시스템으로부터 구성 데이터를 수신하도록 구성되는 것인 상태 머신 엔진.
- 제13항에 있어서, 상기 복구 버퍼는 래티스 프로그래밍 시스템으로부터 압축된 복구 맵 데이터를 수신하도록 구성되는 것인 상태 머신 엔진.
- 제15항에 있어서, 상기 래티스 프로그래밍 시스템은 상기 복구 맵 데이터를 상기 복구 버퍼에 제공하기 전에 상기 복구 맵 데이터를 압축하도록 구성되는 것인 상태 머신 엔진.
- 제13항에 있어서, 상기 외부 디바이스는 상기 복구 맵 데이터를 저장하도록 구성되는 것인 상태 머신 엔진.
- 제13항에 있어서, 상기 외부 디바이스는, 상기 복구 맵 데이터를 분석하고 수정된 구성 데이터를 상기 상태 머신 엔진에 제공하도록 구성되는 것인 상태 머신 엔진.
- 제13항에 있어서, 상기 복구 맵 데이터는 상기 상태 머신 래티스의 복구된 부분에 대응하는 데이터를 포함하는 것인 상태 머신 엔진.
- 제13항에 있어서, 상기 복구 맵 데이터는 상기 상태 머신 래티스의 어느 부분이 복구되었는지를 식별하는 표시 및 상기 상태 머신 래티스가 어떻게 복구되었는지를 식별하는 표시를 포함하는 것인 상태 머신 엔진.
- 상태 머신 엔진의 상태 머신 래티스를 구성하기 위한 방법으로서,
상기 상태 머신 엔진의 프로그램 버퍼에서 구성 데이터를 수신하는 단계;
상기 프로그램 버퍼로부터 래티스 프로그래밍 시스템으로 상기 구성 데이터를 제공하는 단계; 및
상기 래티스 프로그래밍 시스템을 사용하여 상기 상태 머신 래티스를 구성하는 단계를 포함하되, 상기 상태 머신 래티스는 복수의 프로그래밍가능 엘리먼트를 포함하며, 각각의 프로그래밍가능 엘리먼트는 데이터 스트림의 적어도 일부를 분석하고 상기 분석의 결과를 출력하도록 구성된 복수의 메모리 셀을 포함하는 것인 방법. - 제21항에 있어서, 상기 상태 머신 래티스를 구성하기 전에 구성 데이터를 압축해제하는 단계를 포함하는 방법.
- 제21항에 있어서, 상기 상태 머신 엔진의 명령어 버퍼에서 명령어를 수신하는 단계를 포함하는 방법.
- 제23항에 있어서, 상기 래티스 프로그래밍 시스템에 상기 명령어를 제공하는 단계를 포함하는 방법.
- 제24항에 있어서, 상기 래티스 프로그래밍 시스템을 사용하여 상기 상태 머신 래티스를 구성하는 단계는 상기 명령어가 구성 명령어인지를 결정하는 단계 및 상기 명령어가 구성 명령어이면 상기 상태 머신 래티스를 구성하는 단계를 포함하는 것인 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/552,492 | 2012-07-18 | ||
US13/552,492 US9304968B2 (en) | 2012-07-18 | 2012-07-18 | Methods and devices for programming a state machine engine |
PCT/US2013/049755 WO2014014712A1 (en) | 2012-07-18 | 2013-07-09 | Methods and devices for programming a state machine engine |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150036166A true KR20150036166A (ko) | 2015-04-07 |
KR101922762B1 KR101922762B1 (ko) | 2018-11-27 |
Family
ID=49947414
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157001784A KR101922762B1 (ko) | 2012-07-18 | 2013-07-09 | 상태 머신 엔진을 프로그래밍하기 위한 방법 및 디바이스 |
Country Status (7)
Country | Link |
---|---|
US (4) | US9304968B2 (ko) |
EP (1) | EP2875436A4 (ko) |
JP (1) | JP6207605B2 (ko) |
KR (1) | KR101922762B1 (ko) |
CN (1) | CN104487957B (ko) |
TW (1) | TWI492062B (ko) |
WO (1) | WO2014014712A1 (ko) |
Families Citing this family (27)
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 |
US9323994B2 (en) | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
US9235798B2 (en) | 2012-07-18 | 2016-01-12 | Micron Technology, Inc. | Methods and systems for handling data received by a state machine engine |
US9524248B2 (en) | 2012-07-18 | 2016-12-20 | Micron Technology, Inc. | Memory management for a hierarchical memory system |
US9389841B2 (en) | 2012-07-18 | 2016-07-12 | Micron Technology, Inc. | Methods and systems for using state vector data in a state machine engine |
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 |
US9703574B2 (en) | 2013-03-15 | 2017-07-11 | Micron Technology, Inc. | Overflow detection and correction in state machine engines |
US9218862B1 (en) | 2014-04-11 | 2015-12-22 | Altera Corporation | Method and apparatus for operating finite-state machines in configurable storage circuits |
US10430210B2 (en) | 2014-12-30 | 2019-10-01 | 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 |
US11366675B2 (en) | 2014-12-30 | 2022-06-21 | Micron Technology, Inc. | Systems and devices for accessing a state machine |
US10691964B2 (en) | 2015-10-06 | 2020-06-23 | Micron Technology, Inc. | Methods and systems for event reporting |
US10846103B2 (en) | 2015-10-06 | 2020-11-24 | Micron Technology, Inc. | Methods and systems for representing processing resources |
US10977309B2 (en) | 2015-10-06 | 2021-04-13 | Micron Technology, Inc. | Methods and systems for creating networks |
US10146555B2 (en) * | 2016-07-21 | 2018-12-04 | Micron Technology, Inc. | Adaptive routing to avoid non-repairable memory and logic defects on automata processor |
US10019311B2 (en) | 2016-09-29 | 2018-07-10 | Micron Technology, Inc. | Validation of a symbol response memory |
US10268602B2 (en) | 2016-09-29 | 2019-04-23 | Micron Technology, Inc. | System and method for individual addressing |
US10592450B2 (en) | 2016-10-20 | 2020-03-17 | Micron Technology, Inc. | Custom compute cores in integrated circuit devices |
US10929764B2 (en) | 2016-10-20 | 2021-02-23 | Micron Technology, Inc. | Boolean satisfiability |
EP3340044A1 (en) * | 2016-12-22 | 2018-06-27 | Ecole Nationale de l'Aviation Civile | Method and apparatus for processing software code |
US10481881B2 (en) * | 2017-06-22 | 2019-11-19 | Archeo Futurus, Inc. | Mapping a computer code to wires and gates |
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 |
US10740150B2 (en) * | 2018-07-11 | 2020-08-11 | X-Drive Technology, Inc. | Programmable state machine controller in a parallel processing system |
US11307771B2 (en) * | 2020-07-10 | 2022-04-19 | Micron Technology, Inc. | Configurable link interfaces for a memory device |
CN112306889B (zh) * | 2020-11-23 | 2023-10-20 | 国网北京市电力公司 | 充电桩的测试方法、装置、存储介质及处理器 |
Family Cites Families (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5452231A (en) * | 1988-10-05 | 1995-09-19 | Quickturn Design Systems, Inc. | Hierarchically connected reconfigurable logic assembly |
US5774738A (en) * | 1993-05-03 | 1998-06-30 | Texas Instruments Incorporated | State machines |
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 |
US5991907A (en) * | 1996-02-02 | 1999-11-23 | Lucent Technologies Inc. | Method for testing field programmable gate arrays |
US6011407A (en) | 1997-06-13 | 2000-01-04 | Xilinx, Inc. | Field programmable gate array with dedicated computer bus interface and method for configuring both |
DE19861088A1 (de) | 1997-12-22 | 2000-02-10 | Pact Inf Tech Gmbh | Verfahren zur Reparatur von integrierten Schaltkreisen |
US6587979B1 (en) * | 1999-10-18 | 2003-07-01 | Credence Systems Corporation | Partitionable embedded circuit test system for integrated circuit |
US6614703B2 (en) | 2000-01-13 | 2003-09-02 | Texas Instruments Incorporated | Method and system for configuring integrated systems on a chip |
US20050102573A1 (en) * | 2003-11-03 | 2005-05-12 | Macronix International Co., Ltd. | In-circuit configuration architecture for embedded configurable logic array |
US7487542B2 (en) | 2004-01-14 | 2009-02-03 | International Business Machines Corporation | Intrusion detection using a network processor and a parallel pattern detection engine |
JP4335090B2 (ja) * | 2004-05-14 | 2009-09-30 | シャープ株式会社 | 移動端末装置 |
JP2006011825A (ja) | 2004-06-25 | 2006-01-12 | Fujitsu Ltd | 再構成可能演算装置および半導体装置 |
US7392229B2 (en) | 2005-02-12 | 2008-06-24 | Curtis L. Harris | General purpose set theoretic processor |
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 |
US7899977B2 (en) | 2006-12-08 | 2011-03-01 | Pandya Ashish A | Programmable intelligent search memory |
KR101314037B1 (ko) * | 2007-04-26 | 2013-10-01 | 에이저 시스템즈 엘엘시 | 메모리 복구 회로, 집적 회로, 자동화 테스트 설비 장치 및 불량 복구 시스템 |
US8068380B2 (en) * | 2008-05-15 | 2011-11-29 | Micron Technology, Inc. | Block repair scheme |
US8296120B2 (en) * | 2008-06-20 | 2012-10-23 | Utah State University | FPGA simulated annealing accelerator |
US8938590B2 (en) | 2008-10-18 | 2015-01-20 | Micron Technology, Inc. | Indirect register access method and system |
US8209521B2 (en) | 2008-10-18 | 2012-06-26 | Micron Technology, Inc. | Methods of indirect register access including automatic modification of a directly accessible address register |
US7917684B2 (en) | 2008-11-05 | 2011-03-29 | Micron Technology, Inc. | Bus translator |
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 |
US20100118425A1 (en) | 2008-11-11 | 2010-05-13 | Menachem Rafaelof | Disturbance rejection in a servo control loop using pressure-based disc mode sensor |
US10007486B2 (en) | 2008-12-01 | 2018-06-26 | Micron Technology, Inc. | Systems and methods to enable identification of different data sets |
US20100138575A1 (en) | 2008-12-01 | 2010-06-03 | Micron Technology, Inc. | Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices |
US9164945B2 (en) | 2008-12-01 | 2015-10-20 | Micron Technology, Inc. | Devices, systems, and methods to synchronize parallel processing of a single data stream |
US9348784B2 (en) | 2008-12-01 | 2016-05-24 | Micron Technology, Inc. | Systems and methods for managing endian mode of a device |
US8140780B2 (en) | 2008-12-31 | 2012-03-20 | Micron Technology, Inc. | Systems, methods, and devices for configuring a device |
US20100174887A1 (en) | 2009-01-07 | 2010-07-08 | Micron Technology Inc. | Buses for Pattern-Recognition Processors |
US8214672B2 (en) | 2009-01-07 | 2012-07-03 | Micron Technology, Inc. | Method and systems for power consumption management of a pattern-recognition processor |
US8281395B2 (en) | 2009-01-07 | 2012-10-02 | Micron Technology, Inc. | Pattern-recognition processor with matching-data reporting module |
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 |
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 |
US8281190B2 (en) * | 2009-08-02 | 2012-10-02 | Avago Technologies Enterprise IP (Singapore) Pte. Ltd. | Circuits and methods for processing memory redundancy data |
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 |
US9323994B2 (en) | 2009-12-15 | 2016-04-26 | Micron Technology, Inc. | Multi-level hierarchical routing matrices for pattern-recognition processors |
US8766666B2 (en) * | 2010-06-10 | 2014-07-01 | Micron Technology, Inc. | Programmable device, hierarchical parallel machines, and methods for providing state information |
US8601013B2 (en) | 2010-06-10 | 2013-12-03 | Micron Technology, Inc. | Analyzing data using a hierarchical structure |
KR101640295B1 (ko) | 2011-01-25 | 2016-07-15 | 마이크론 테크놀로지, 인크. | 정규 표현을 컴파일하기 위한 방법 및 장치 |
WO2012103151A2 (en) | 2011-01-25 | 2012-08-02 | Micron Technology, Inc. | State grouping for element utilization |
KR101607736B1 (ko) | 2011-01-25 | 2016-03-30 | 마이크론 테크놀로지, 인크. | 오토마톤의 진입 차수 및/또는 진출 차수를 제어하기 위한 양화 언롤링 |
EP2668574B1 (en) | 2011-01-25 | 2021-11-24 | Micron Technology, INC. | Utilizing special purpose elements to implement a fsm |
-
2012
- 2012-07-18 US US13/552,492 patent/US9304968B2/en active Active
-
2013
- 2013-07-09 KR KR1020157001784A patent/KR101922762B1/ko active IP Right Grant
- 2013-07-09 EP EP13820674.3A patent/EP2875436A4/en not_active Ceased
- 2013-07-09 CN CN201380038508.4A patent/CN104487957B/zh active Active
- 2013-07-09 WO PCT/US2013/049755 patent/WO2014014712A1/en active Application Filing
- 2013-07-09 JP JP2015523127A patent/JP6207605B2/ja active Active
- 2013-07-18 TW TW102125813A patent/TWI492062B/zh active
-
2016
- 2016-04-04 US US15/090,305 patent/US10509995B2/en active Active
-
2019
- 2019-12-16 US US16/715,755 patent/US11599770B2/en active Active
-
2023
- 2023-02-15 US US18/110,162 patent/US20230196065A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
TW201411357A (zh) | 2014-03-16 |
JP6207605B2 (ja) | 2017-10-04 |
KR101922762B1 (ko) | 2018-11-27 |
WO2014014712A1 (en) | 2014-01-23 |
US20230196065A1 (en) | 2023-06-22 |
EP2875436A1 (en) | 2015-05-27 |
US20160217365A1 (en) | 2016-07-28 |
CN104487957B (zh) | 2017-10-03 |
US20200117977A1 (en) | 2020-04-16 |
EP2875436A4 (en) | 2016-11-09 |
US11599770B2 (en) | 2023-03-07 |
US20140025614A1 (en) | 2014-01-23 |
JP2015534659A (ja) | 2015-12-03 |
TWI492062B (zh) | 2015-07-11 |
US9304968B2 (en) | 2016-04-05 |
US10509995B2 (en) | 2019-12-17 |
CN104487957A (zh) | 2015-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11599770B2 (en) | Methods and devices for programming a state machine engine | |
US11741014B2 (en) | Methods and systems for handling data received by a state machine engine | |
US9454322B2 (en) | Results generation for state machine engines | |
US10671295B2 (en) | Methods and systems for using state vector data in a state machine engine | |
JP6122121B2 (ja) | パターン認識処理における電力管理のための方法およびシステム | |
KR20150132226A (ko) | 상태 머신 엔진에 의해 수신된 데이터를 제공하기 위한 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |