KR20100017897A - 상호접속부에서 멀티-쓰레드 오더링된 큐들에 대한 공유 저장기 - Google Patents

상호접속부에서 멀티-쓰레드 오더링된 큐들에 대한 공유 저장기 Download PDF

Info

Publication number
KR20100017897A
KR20100017897A KR1020097026779A KR20097026779A KR20100017897A KR 20100017897 A KR20100017897 A KR 20100017897A KR 1020097026779 A KR1020097026779 A KR 1020097026779A KR 20097026779 A KR20097026779 A KR 20097026779A KR 20100017897 A KR20100017897 A KR 20100017897A
Authority
KR
South Korea
Prior art keywords
thread
cam
entries
entry
queue
Prior art date
Application number
KR1020097026779A
Other languages
English (en)
Other versions
KR101467932B1 (ko
Inventor
스티븐 더블유. 해밀턴
Original Assignee
쏘닉스, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 쏘닉스, 인크. filed Critical 쏘닉스, 인크.
Publication of KR20100017897A publication Critical patent/KR20100017897A/ko
Application granted granted Critical
Publication of KR101467932B1 publication Critical patent/KR101467932B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Abstract

일 실시예에서, 집적회로의 IP(intellectual property) 코어들 사이에서 다중 쓰레드들의 페이로드는 오더 큐들의 수를 사용하는 페이로드를 버퍼링함으로써 전송된다. 큐들 각각은 큐를 구성하는 최소 수의 버퍼 엔트리들에 대한 액세스로 보장된다. 각각의 큐는 개별 쓰레드에 할당된다. 임의의 큐를 구성하는 버퍼 엔트리들의 수는 선착순 원칙에 따라 사용되지 않은 버퍼 엔트리들의 공유 풀로부터의 차용에 의해 최소치 이상으로 증가된다. 또 다른 실시예에서, 상호접속부는 상호접속부에 결합되는 데이터 처리 엘리먼트들 사이에서 라우팅되는 요청들 및/또는 응답들을 버퍼링하는 다수의 논리적, 멀티-쓰레드 오더링된 큐들에 대한 저장기가 공유되는 콘텐츠 어드레스가능 메모리(CAM) 구조를 구현한다. 다른 실시예들 또한 개시된다.

Description

상호접속부에서 멀티-쓰레드 오더링된 큐들에 대한 공유 저장기{SHARED STORAGE FOR MULTI-THREADED ORDERED QUEUES IN AN INTERCONNECT}
[0001] 본 발명의 실시예는 칩 상에 있는 시스템의 다중 처리 엘리먼트들 간의 통신을 가능케하는 상호접속부(interconnect) 내에서의 오더링된 큐들(ordered queues)의 사용에 관한 것이다. 또한 다른 실시예들도 개시된다.
[0002] 통상적으로, 상호접속부는 각각의 쓰레드(thread)에 대해 선입-선출 버퍼(FIFO)와 같은, 개별적으로 전용되는 오더링된 큐 구조를 구현한다. 주어진 쓰레드에서 개시자 코어(initiator core)로부터의 요청들은 쓰레드의 테일(tail)에서 연관된 FIFO에 기록되는 반면, 이전에 저장된 요청들은 쓰레드의 헤드(head)에서 FIFO로부터 판독된다(그리고 다음에는 이들의 타켓 코어들로 포워딩된다). 쓰레드는 중단(quiet)될 수 있지만(그러나 실행이 종료되지는 않는다), 쓰레드의 FIFO는 비어져(empty) 사용되지 않고 유지되어 상기 쓰레드에 의한 사용에 이용될 수 있다.
[0003] 일 실시예에서, 집적회로의 IP(intellectual property) 코어들 사이에서 다중 쓰레드들의 페이로드는 다수의 오더 큐들을 사용하여 페이로드를 버퍼링함으로써 전송된다. 큐들 각각은 큐를 구성하는 최소 수(minimum number)의 버퍼 엔트리들로의 액세스가 보장된다. 각각의 큐는 개별 쓰레드에 할당된다. 임의의 큐를 구성하는 버퍼 엔트리들의 수는 선착순(first-come, first- served) 원칙에 따라 사용되지 않은 버퍼 엔트리들의 공유 풀(shared pool)로부터 차용(borrowing)에 의해 최소치 이상으로 증가된다. 또 다른 실시예에서, 상호접속부는 상호접속부에 연결된 데이터 처리 엘리먼트들 사이에서 라우팅되는 요청들 및/또는 응답들을 버퍼링하는 다수의 논리적인 멀티-쓰레드 오더링된 큐들에 대해 저장기를 공유하는 콘텐츠 어드레스가능 메모리(CAM) 구조를 구현한다. 다른 실시예들 또한 개시되고 청구된다.
[0004] 본 발명의 실시예들은 일례로 도시된 것이며 첨부되는 도면들의 도안들에 제한되지 않으며, 첨부되는 도면들에서 동일한 부호들은 유사한 엘리먼트들을 나타낸다. 본 명세서에 본 발명의 "실시예" 또는 "일 실시예"란 부호는 반드시 동일한 실시예일 필요는 없으며, 이들은 적어도 하나를 의미하는 것임을 주목해야 한다.
[0005] 도 1은 실시예가 구현되는 집적회로의 블록도이다.
[0006] 도 2A는 OCP 요청 단계(Request phase)와 관련하여, 우회가능한 형태의 멀티-쓰레드 공유 저장기(MTSS) FIFO의 사용예를 나타낸다.
[0007] 도 2B는 도 2A의 MTSS FIFO 상에서 이루어질 수 있는 동작들의 시퀀스를 나타낸다.
[0008] 도 3은 실시예에 따라, CAM 구조를 사용하여 MTSS FIFO(202)가 구현되는 방법의 블록도이다.
[0009] 도 4는 CAM 키의 값을 동적으로 구축하기 위한 하드웨어를 포함하는 본 발명의 바람직한 실시예에 따른 CAM 엔트리의 논리 다이아그램이다.
[0010] 도 5는 CAM이 다수의 쓰레드 FIFO들을 논리적으로 구현하는 방법을 나타내기 위한 CAM 저장(CAM 블록)의 블록도이다.
[0011] 도 6은 주어진 쓰레드에서 요청들 및/또는 응답들의 로컬(local) 시퀀스 오더를 구축하는데 단일 카운터가 이용되는 실시예에 따른, MTSS 상태 블록의 내부 상세도를 나타낸다.
[0012] 도 7은 비동기식 멀티-쓰레드(MT) FIFO의 블록도를 나타낸다.
[0013] 도 8은 실시예에 따른 비동기식 MT FIFO의 블록도이다.
[0014] 도 9는 집적회로들에 대한 설계 및 제조 프로세스의 블록도이다.
[0015] 본 발명의 실시예는 상호접속부에서의 사용을 위한 멀티-쓰레드 공유 저장기(MTSS; multi-threaded shared storage)를 차단하지 않는(non-blocking) 오더링된 큐에 관한 것이다. 본 발명의 또 다른 실시예는 오더링된 큐의 기록 포트 및 판독 포트가 본 발명에서 비동기식 멀티-쓰레드(MT) 오더링된 큐로 간주되는 개별 클록 도메인들(separate clock domains)에 제공되는 방안에 관한 것이다.
[0016] 본 발명에서 상호접속 패브릭(fabric) 또는 버스 패브릭으로도 불리는 상호접속부(interconnect)는 서로가 빠른 속도로 통신하도록 하기 위해 집적회 로의 엘리먼트들(코어들)을 처리하기 위한 수단을 제공한다. 각각의 코어는 상이한 동작 속도들, 대역폭 용량들 및 시그널링 요구조건들을 가질 수 있지만, 상호접속부와의 접속을 위해 유사한 프로토콜을 사용할 수 있다. 상호접속부는 서로 통신하는 코어들 사이에서 요구되는 변환(translation)을 제공하는 역할을 한다. 이를 테면, 엘리먼트들 중 하나는 데이터 프로세서일 수 있으며, 상호접속부에 대한 데이터 프로세서의 인터페이스는 어드밴스드 마이크로콘트롤러 버스 아키텍쳐(AMBA)를 따르며, 어드밴스드 마이크로콘트롤러 버스 아키텍쳐(AMBA)는 어드밴스드 RISC 머신 프로세서 또는 아콘 RISC 머신(ARM) 프로세서용으로 광범위하게 사용되는 온-칩 버스이다. 예를 들어, AMBA 2.0 스펙(specification) 참조. 다르게는 OCP-IP(Open Core Protocol International Partnership)과 같은 다른 인터페이스를 통해 연결될 수 있고 다른 특정 업무들을 수행하는 프로세서일 수 있다. 예를 들어, OCP 2.2 스펙 참조. 상호접속부에 연결되는 또 다른 처리 엘리먼트는 외부 동적 랜덤 액세스 메모리(DRAM)가 접속된 일부 또는 전체 코어들에 의해 사용되도록 제공되는 메모리 서브시스템일 수 있다. 현재의 공급자들(vendors)은 시스템-온-칩(SoC) 설계의 일부로서 이러한 처리 엘리먼트들 제조에 이용되는 반도체 IP 코어들을 제공한다.
[0017] SoC 설계에 기초하는 제품들의 효율적 개발을 위해, 캘리포니아 마운틴뷰에 위치한 반도체 IP 제공자인 소닉스, 인크는 미래의 SoC 요구조건들을 충족시키기 위해 상호접속부들의 기술에 대한 개발을 지속적으로 진행하고 있다. 개선된(advanced) 상호접속부 설계는 각각의 파생 제품에 대한 실질적 리엔지니어링이 필요 없도록 해야 한다. 이를 테면, (프로세서-중심 SoC 모델과 비교할 때) 몇 가지 복잡한 코어들 및 이질적 처리(heterogeneous processing) 엘리먼트들을 포함하는 SoC 모델들을 보다 지원하기 위해, 차단되지 않는 개선된 상호접속부 패브릭들이 제공된다. 이러한 개선된 상호접속부 설계는 코어들 간의 통신을 위해 대역폭 및 잠복기(latency)의 균형을 맞춰야 한다.
[0018] 현재 SoC 설계들은 이러한 다중 코어들이 병렬적으로(in parallel) 실행되는 것을 허용한다. 즉, 매우 큰 시간 간격들에서만 서로 동기화되거나 또는 관련되는 개별적 실행 쓰레드들이 제공된다. 이러한 개별적 처리 쓰레드들이 개시자 코어들로부터의 전달정보들(communications)을 방출하고 타겟 코어들로 지향됨에 따라, 상호접속부에서의 결과들은 통신 트랜잭션들의 스트림들과 구별된다. 이들은 통신 쓰레드들로 불린다. 이러한 통신 쓰레드들 중 몇 개가 이를 테면 공통 코어로부터 방출되거나 또는 공통 코어를 목표시하는 공통 자원(common resource)을 수반하면, 다중 스트림들 간의 동기화 관련성(synchronization dependency)들을 도입하기 위해 상호접속 콤포넌트가 요구된다. 그렇지 않으면, 성능면에서 통신 스트림들의 독립성을 유지하는 것이 바람직할 수 있다. 이를 위해, 상호접속부는 오더링된 큐들(이를 테면, FIFO들)을 가지며 오더링된 큐들의 버퍼링 기능은 접속된 코어로부터의 임의의 주어진 쓰레드가 상호접속부를 통해 쓰레드를 실행시키는 것을 차단할 가능성의 감소를 돕는 것이다. 각각의 FIFO는 랜덤하게 어드레스가능한 개별 데이터 워드 저장기를 가지며 이러한 어드레스들의 시퀀스에 대한 액세스 포인터들을 유지한다. 전용된 FIFO는 연관된 쓰레드에 대한 목표 성능을 만족시키 기 위해 필요한 충분한 향의 저장기 공간 또는 엔트리들(깊이)를 포함해야 한다.
[0019] 실시예에서, 쓰레드는 디바이스 내의 단일 애플리케이션 또는 단일 처리 유니트와 같은 소스로부터 발생되는 데이터 스트림으로써 간주될 수 있고, 또한 단일 소스로부터의 다중 쓰레드들은 임의의 주어진 시간에서 진행될 수 있다(may be in progress). 쓰레드는 업무(task)를 달성하기 위해 단일 소스로부터의 다른 쓰레드들과 함께 동시적으로 및/또는 독립적으로 실행될 수 있다. 처리 쓰레드(processing thread)는 명령들의 오더링된 시퀀스이다. 통신 쓰레드는 트랜잭션들의 오더링된 시퀀스를 포함할 수 있다. 트랜잭션(transaction)은 규정된 및 오더링된 트랜스퍼들(transfers)의 (단계들(phases)에 대한) 세트이다. 따라서, 쓰레드는 트랜스퍼들의 오더링된 시퀀스일 수 있다. 일반적으로, (개시자의) 처리 쓰레드는 통신 쓰레드를 생성한다.
[0020] 도 1은 실시예가 구현될 수 있는 집적회로 설계의 블록도이다. 여기서 회로 설계, 상호접속부 설계, 시스템 설계, 또는 IP 코어에 대한 임의의 참조(reference)는 설계에 기초하여 제조되는 코어 또는 실제 회로를 의미한다는 것이 이해된다. 집적회로 또는 시스템의 일부로서 상호접속부(118)에 접속되는 몇 개의 예시적 IP 코어들이 제공된다. 일반적으로, IP 코어는 상호접속부(118)를 통해, 응답(response)을 발행(issue)하는 대상(target)으로서, 또는 요청들(requests)을 발행하는 개시자로서 작용할 수 있다. 도 1의 예에서, 중앙처리장치(CPU) IP 코어(102), 암호화(encryption) 및 인증과 같은 보안 기능들을 수행하도록 전용될 수 있는 보안 IP 코어(104), 소정의 신호 처리 업무들을 가속시키는 디지털 신호 프로세서(DSP) IP 코어(106), 멀티미디어 데이터 구조들의 처리에 특정되는 멀티미디어 IP 코어(108), 그래픽 신호 처리에 특정되는 그래픽 IP 코어(110), 데이터 스트림들의 형성에 특정되는 스트리밍 I/O IP 코어(112), 및 집적회로 외부에 있는 콤포넌트들 또는 디바이스들과 통신하는 인터페이스(예를 들어, 무선 통신 인터페이스)로서 작용하는 통신 IP 코어(114)가 제공된다. 이러한 코드들 각각은 개시자로 간주될 수 있으며, 각각의 방식으로 상호접속부(118)에 개시자 에이전트 인터페이스(IA)(116)를 연결한다.
[0021] 개사자 IP 코어들 이외에, 상호접속부(118)는 하나 이상의 타겟 IP 코어들(상호접속부(118)를 통해 착수되는 트랜잭션들의 타겟들인 코어들)을 포함한다. 본 예에서, 메모리 서브시스템은 하나 이상의 DRAM IP 코어들(120-126)을 가지는 것으로 도시되며 또한 플래시 메모리 IP 코어(128)를 포함할 수 있고, 이들 모두는 개별 타겟 에이전트 인터페이스들(TA)(130)을 통해 모두 상호접속부에 접속된다. 각각의 DRAM IP 코어(120-126)는 이들 각각의 메모리 판독 및 기록 트랜잭션들을 원활히하기 위해 연관된 메모리 스케줄러 및 DRAM 제어기(미도시)를 포함할 수 있다. 도 1에 도시된 IP 코어들의 수 및 이들 각각의 기능들은 단지 예시적인 것으로, 상호접속부(118)에 접속되는 IP 코어들의 다른 조합들을 갖는 다른 집적회로 환경들도 가능하다는 것을 주목해야 한다.
[0022] 상호접속부(118)는 동기식, 멀티-쓰레드(또는 멀티-태깅(tagged)), 시간-멀티플렉싱 인터페이스들(이를 테면, AMBA, OCP 등)을 사용할 수 있다. 이들은 클록 사이클 당 단지 하나의 트랜스퍼만이 가능하다. 이러한 트랜스퍼는 임의 의 쓰레드(또는 태그)와 연관될 수 있다. 따라서, 시간-멀티플렉싱(time- multiplexed)된 쓰레드들의 세트는 이들의 턴(turn)을 대기함으로써 인터페이스를 공유한다. 모든 쓰레드들이 느린 진행률(rate of progress)로 활성화되거나, 또는 하나의 쓰레드가 순간 최고 속도(peak rate)로 활성화되나, 또는 이러한 2개의 극과극들(extremes) 간의 임의의 조합 - 이를 테면 3개가 1/3 속도로 활성화될 수 있다.
[0023] IP 코어들 및 상호접속부(118)는 캘리포니아 마운틴 뷰의 소닉스 인크와 같은 제공자에 의해 개발된 자급식(self-contained) 및 예비-설계식(pre-designed) 기능을 가질 수 있다. 이들은 시스템에 대한 매크로 펑크션들(macro functions)로서 사용될 수 있다. 예를 들어, 상호접속부(118)는 시스템에서 타겟들 및 개시자들에 대해 할당된 어드레스들로 어드레스 맵(136)을 구현하며, 트랜잭션들 및 쓰레드들의 일부로서 코어들 간의 요청들 및 응답들을 라우팅하는 역할을 한다. 어드레스 생성기는 어드레스 맵(136)에서 할당된 논리 어드레스들을 시스템을 구성하는 IP 코어들의 물리적 어드레스들로 변환시키기 위한 각각의 IA(116) 및 TA(130)의 일부일 수 있다. 상호접속부(118)에 대한 구성 파라미터들(138)은 특정 집적회로 또는 SoC 애플리케이션에 적합하게 설정될 수 있다.
[0024] 실질적으로, 상호접속부(118)는 시스템의 IP 코어들 사이에 공유 통신 버스를 제공한다. 상호접속부(118)는 IP 코어들(102-114, 120-128) 간의 어드레스-맵핑 및 중재된 통신을 원활히하는 어댑터들 또는 다른 논리 모듈들과 같은 소프트웨어 및 하드웨어의 조합으로 구현될 수 있다. 상호접속부(118)는 오로지 IP 코어들(SoC로 불림)과 동일한 IC 다이 상에서 구현되거나, 또는 시스템-인-패키지(System-in-a-Package)(SiP)를 구성하는 멀티-칩 IC 패키지의 일부일 수 있다.
[0025] 상호접속부(118)는 집적회로를 통해 스테이지들에서의 요청들 및 응답들을 저장 및 이동시키기 위한 버퍼링 기능으로(파이프라인된 프로토콜을 구현하는 흐름 제어 논리로) 파이프라인된다(pipelined). 상호접속부(118)는 집적회로에서 실행되는 또 다른 쓰레드로부터의 요청들과 관련하여 차단되지 않는(non-blocking) 흐름 제어 논리를 가질 수 있다.
[0026] 동작하는 각각의 쓰레드에 대해 개별 전용 FIFO를 사용하기 위한 일부 상호접속부 기술들이 호출된다. 이는 FIFO에서의 저장 블록은 연관된 쓰레드에 대한 성능 목표들을 충족시키기 위해 충분한 룸(room)을 포함해야 한다는 것을 의미한다. 쓰레드가 덜 활성화되는 동안의 시간 기간들을 가질 때 문제가 발생되며, 연관된 FIFO에서 다수의 엔트리들은 사용되지 않고 남게된다. 총체적으로, 상호접속부에 대한 결과는 비록 FIFO 블록들은 모든 쓰레드들이 동작할 때 대한 최대 성능을 지원하기에 충분한 엔트리들을 갖고 있지만, 대부분의 시스템에서 이는 모든 쓰레드들에 대해 상호접속부들이 동시에 모두 최대 성능으로 동작하게 지원할 수 있는 것은 불가능하기 때문에, 이는 자원 낭비적이다.
[0027] 상호접속부에 연결되는 다수의 IP 코어들 사이에서 다중 쓰레드들의 페이로드를 전송하는 동안, 다수의 오더 큐들을 사용하여 페이로드가 버퍼링되도록, 상호접속부가 설계되고 동작될 수 있다. 각각의 쓰레드는 그 자신의 큐(queue)를 가지고 있으나, 큐를 구성하는 버퍼 엔트리들(또한 버퍼들 또는 저장 셀들로도 불림)의 수는 동적으로(dynamically) 관리된다. 오더 큐들 각각은 최소 수의 버퍼 엔트리들로의 액세스가 보장된다. 시간상 임의의 한 포인트에서, 각각의 큐 엔트리는 큐 엔트리에 할당된 쓰레드에 의해서만 사용되며, 다른 것들은 사용되지 않는다. 임의의 큐들 중 하나의 큐를 구성하는 버퍼 엔트리들의 수는 선착순 원칙에 따라 사용되지 않는 버퍼 엔트리들의 공유 풀로부터 차용(borrowing)에 의해 최소치 이상 증가된다. 하기에서 설명되는 바와 같이, 예로써, 이러한 동적 방안은 동일한 성능을 제공하는데 있어 보다 적은 수의 전체 버퍼 엔트리들을 요구한다. 따라서, 풀에서 큐 엔트리들은 모든 쓰레드들에 의해 공유된다. 각각의 쓰레드는 최소 수의 엔트리들로의 액세스가 보장되면서, 풀에 남아있는 엔트리들은 선착순 원칙에 따라 모든 쓰레드들에 의해 공유된다. 상호접속부(118)에 대한 인터페이스들, 예를 들어, IA(116) 및 TA(130)(도 1 참조)은 모든 쓰레드들이 동시에 활성화되는 것, 즉 동일한 사이클에서 전송되는 것을 방지하며, 이는 성능을 제한하지 않고, 인터페이스의 사용과 동일한 패턴에 따라 큐 엔트리들을 사용할 수 있게 한다. 각각의 코어는 상이한 쓰레드 ID들을 갖는 다중 쓰레드들을 실행할 수 있다.
[0028] 버퍼 엔트리들의 공유형 풀에서 각각의 엔트리는 주어진 오더 큐에 정적으로 할당되지 않은 메모리 블록으로서 보일 수 있다는 것이 주목된다. 실제로, 할당된 쓰레드가 동작하고, 공유형 풀에 대해 요구되는 것처럼 엔트리들로부터 차용되고 복귀되는(returning) 동안, 큐의 크기는 변경된다. 하기 개시되는 실시예에서, 오더 큐들은 FIFO들이다. 또한, 오더 큐들 각각은 동일한, 최소수의 버퍼 엔트리들을 가질 수 있다. 대안적으로, 오더링된 큐들 중 일부는 상이한, 최소수의 버퍼 큐들을 가질 수 있다.
[0029] 실시예에서, 상호접속부는 논리적으로 평행한 다수의 쓰레드 큐들에 대한 공유 저장기(예를 들어, 멀티-쓰레드 공유 저장기, MTSS, FIFO)인 콘텐츠 어드레스가능 메모리(CAM) 구조를 구현한다. MTSS FIFO는 상호접속부(118)에 의해 IP 코어들 간에 라우팅되는 요청들 및/또는 응답들을 버퍼링한다. 상호접속부는 이러한 크기(multitude)의 쓰레드 버퍼들에 대한 공유 저장기로서 CAM를 구현한다. CAM는 하나 이상의 개시자 IP 코어들로부터 발생될 수 있고 집적회로의 타겟 IP 코어로 라우팅되는 2개 이상의 쓰레드로부터 발생하는 요청들을 저장한다. 공유 CAM는 조합된 데이터 워드(word) 저장 및 포인터 관리 기능들로부터 형성된 CAM 엔트리들을 포함한다. 예시적 CAM 구조의 사항들에 대한 분석에 앞서, 도 2A는 바이패스가능한(bypassable) 형태로의 MTSS FIFO 사용 예를 나타낸다. MTSS FIFO는 다중 워드 저장 블록이 2개 이상의 쓰레드 FIFO들에 의해 공유되는 것을 허용한다. 쓰레드 FIFO는 특정 동작 쓰레드에 할당되거나 또는 특정 동작 쓰레드와 연관된 논리적 FIFO이다.
[0030] 멀티-쓰레드 FIFO들의 속성은 이들의 쓰레드간(inter-thread) 차단 반응(behavior)에 있다. 제 1 쓰레드가 기록 포트는 쓰레드 상에서의 기록을 지속하면서 판독 포트 상의 엔트리들을 추출하는 것을 실패하면, FIFO는 FIFO가 채워질될 때까지 쓰레드 상에 엔트리들을 축적한다. 제 1 쓰레드가 채워지면서 제 2 쓰레드가 FIFO를 통해 엔트리들을 처리하는 것이 가능하면, FIFO는 차단되지 않는다 고 불린다. 그렇지 않다면, 이는 차단된다고 불린다. 일반적으로, FIFO 차단은 바람직하지 않으며, 이는 (SoC 상에서) 하나의 중단된 프로세스가 동시발생적인 프로세스들 모두를 차단할 수 있기 때문이다. 이는 디바이스 시스템에 의해 달성되는 성능과 직접적으로 관련되는, 동시적으로 동작하는 평균 프로세스들의 수를 감소시킨다. 도 2A에 도시된 일례에서, MTSS FIFO 에서 저장기의 전체 용량( total amount of storage )이 특정될 수 있으며, 저장기의 일부는 각각의 쓰레드의 연관된 FIFO에 할당될 수 있다. 모든 할당들(allocations)의 합이 전체 저장 크기를 초과하면, 소정의 쓰레드간 차단(inter-thread-blocking)이 이루어질 수 있다.
[0031] MTSS FIFO(202)는 기록 포트(204)를 포함하며, 기록 포트(204)를 통해 (기록 데이터를 포함하는) 페이로드 요청들이, 이 경우 상호접속부(118)의 개시자 에이전트에서의 OCP 인터페이스로부터 수신된다. 요청이 속하는 쓰레드가 어떤 것인지를 식별하는 요청 페이로드와 연관된 쓰레드 ID(wid)가 수신된다. 또한, 기록 포트는 출력 쓰레드 사용(busy) 신호(id_full)를 포함하며, 여기서 쓰레드 당 비트(bit)는 인터페이스가 스톨(stall) 되도록 확정되어, 쓰레드와 연관된 FIFO가 채워지면, 쓰레드에 대한 추가의 요청들이 제시되는 것이 방지된다(예를 들어, 최대수의 엔트리들이 FIFO에 할당되고 모든 엔트리들이 사용되면, 이들은 이전의 요청들을 저장한다).
[0032] 또한, MTSS FIFO(202)는 FIFO의 헤드로부터 획득되는(pulled) 페이로드 데이터(rdata)를 제공하는 판독 포트(206)를 포함한다. 다음 이러한 판독 데이터는 페이로드의 명령들에 따라, 상호접속부에 의해 인터페이스들의 다른 하나로 " 다운스트림" 전송된다. 또한, MTSS FIFO는 쓰레드들이 활성화된다는 표시, 즉 쓰레드들이 이들 각각의 큐들의 헤드로부터 출력되는데 이용가능한 페이로드를 갖는다는 표시(id_active)를 제공한다. 상호접속부(118)는 FIFO 가 판독하는( thread ) 쓰레드를 특정하는 중재 블록( arb )에서의 다운스트림 자원들( busy )과 관련되는 상태와 함께 이러한 활성 상태를 이용한다. 상호접속부(118)는 이러한 선택을 MTSS(rid)에 제공하며 FIFO로부터 판독 데이터(payload)의 추출(pull)이 준비될 때 신호(read)를 확정한다.
[0033] 도 2B는 도 2A의 메커니즘으로 이루어질 수 있는 동작들이 시퀀스를 나타낸다. (단지 본 예에서만) 도 2A의 MTSS FIFO는 전체 7개의 엔트리들을 갖도록 구성되는 것으로 가정되며, OCP에서 4개의 쓰레드들 각각에 대해 하나의 엔트리가 할당되며, 공유를 위해서는 3개의 엔트리들이 이용된다. 각각의 쓰레드는 최대 3개의 엔트리들의 사용을 허용한다. 초기에, 사이클 CO 내지 C4에서, MTSS FIFO의 자원 다운스트림은 쓰레드 1 상에서 사용(busy)된다. 사이클 C1 내지 C8의 OCP 요청 단계에서 활성도 버스트(burst of activity)가 발생한다. MThreadID 필드는 MTSS에 기록되는 각각의 요청에 대한 쓰레드를 식별한다. 사이클 Cl에서, 제 1 요청이 쓰레드 1 상에 기록되어, 쓰레드 1에 대한 내부 카운터는 사이클 C2에서 0에서 1로 전진하게 된다. id_active 필드는 상기 사이클에서 카운트 값이 0이 아니라는 사실을 반영한다는 것이 주목된다. 중재 블록(arb block)은 최고 우선순위로서 쓰레드 0을 갖고 최저 우선순위로서 쓰레드 3을 갖는 엄격 우선순위(strict priority)를 사용하는 것으로 가정된다. 따라서 사이클 C2에서 쓰레드 1이 선택된 다. 그러나, 쓰레드 1은 사용중이기 때문에, 판독 신호는 확정되지 않는다. 쓰레드 0 상에서의 RQ2가 사이클에 기록되고, 다음 클록 엣지에서 쓰레드 0 카운터로 전진한다. id_active에서의 쓰레드 0 비트는 사이클 C3에서 확정되며 중재자(arbiter)는 쓰레드 0을 선택하고 MTSS로부터의 판독을 수행한다. 이는 쓰레드 0 카운터가 다음 클록 엣지에서 0으로 감소되게 하여, id_active로부터 0 비트가 제거되고 사이클 C4에서의 중재로부터 쓰레드 0이 제거된다.
[0034] 사이클들 C3 및 C4에서, 쓰레드 1 상에 추가의 요청들이 기록된다. 쓰레드 1 카운터는 2 및 3으로의 증분에 의해 이를 반영한다. 각각의 쓰레드에는 단일 엔트리만이 할당되기 때문에, 이러한 2개의 요청들은 공유 MTSS 엔트리들에 저장된다. 공유 엔트리 카운터는 이러한 할당들을 추적하도록 증분된다. 모든 쓰레드들에 대한 최대 할당은 3으로 설정되기 때문에, 쓰레드 1 FIFO는 C4에서의 기록의 결과로서 채워진다(쓰레드 1은 이 사이클에서의 판독을 위해 선택되지만, 여전히 사용중으로 판독은 이루어지 않는다는 것이 주목된다). 쓰레드 1에 대한 추가의 기록을 방지하기 위해, MThreadBusy는 비트 1에 확정된다. 결과적으로, OCP 마스터가 전환되고 사이클 C5에서 시작되는 쓰레드 3 상에서 요청들의 전송이 시작된다. 한편, 쓰레드 1 상의 다운스트림 자원들이 해제되어(become free), 중재자(arbiter)가 C5 사이클에서 시작되는 쓰레드 1 FIFO의 추출을 시작하게 허용된다.
[0035] C6가 시작되는 클록 엣지에서, 쓰레드 1 카운터는 쓰레드에 대한 MThreadBusy 비트가 확정해제(deassert)되는 2로 감소된다. 이는 쓰레드 1 상에 추가 기록을 허용하지만, 도시된 경우에서, 마스터는 잠시 동안 쓰레드 3 상에 요청들을 지속적으로 제공하도록 선택한다. C6에서, 쓰레드 3 상에 제 2 요청이 기록될 때, 상기 쓰레드는 최소 할당을 초과하게 되어, 공유 엔트리가 사용된다. 이러한 엔트리는 이전 사이클에서 쓰레드 1에 의해서만 해제되는 것이 가능하다. id_active에서 쓰레드 3은 사이클 C6에서 확정되나, 중재자는 FIFO가 사이클 C8에서 빌 때까지 쓰레드 1에 대한 지원(favor)을 지속한다. 다음, 중재자는 C9에서의 1 사이클 중단을 제외하고, FIFO 3를 추출하도록(draining) 전환된다. C8에서, 쓰레드 0 상에서 최종 기록이 이루어져, 중재자는 C9에서 엔트리를 추출한다(drain). 따라서, 상기 동작 시퀀스들은 작업중인 MTSS 메커니즘을 나타내지만, 다른 동작 시퀀스들도 가능하다.
[0036] 이제 도 3을 참조로, 실시예에 따라 MTSS FIFO(202)가 CAM에 의해 어떻게 구현될 수 있는지에 대한 블록도가 도시된다. CAM 블록(또는 CAM 저장부(store))(304)는 하기와 같이 변형될 수 있는 통상의 CAM일 수 있다. CAM 블록(304)은 다수의 CAM 엔트리들을 포함하며, 각각의 엔트리는 단일 버퍼 엔트리를 위한 논리 게이트들 및 저장기 회로를 포함한다. 각각의 엔트리는 엔트리가 사용중인지(예를 들어, 쓰레드 또는 FIFO에 할당되었는지) 아닌지를 나타내는 유효 필드(valid field)를 포함한다. 각각의 엔트리는 키(key) 및 데이터 워드(data word)를 저장한다. 적어도, 키는 현재 엔트리가 할당된 FIFO 및 연관된 쓰레드(wid)를 나타내는 제 1 필드를 포함한다. 데이터 워드는 콘텐츠 어드레스가능 형태로 저장되고 리트리브되는(retrieved) 연관된 쓰레드에서 버퍼링된 요청 또는 응답의 일부, 이를 테면 요청 또는 응답 페이로드의 단일 워드를 포함한다. 데이터 워드는 기록 포트를 통해 CAM의 엔트리로써 저장되는 한 쌍의 정보를 형성하기 위해 키와 연결될 수 있다.
[0037] CAM 블록(304)은 인덱스(때로는 키(key)로 불림) 부분 및 데이터 워드 부분을 갖는 저장 위치들의 수집부(collection)일 수 있다. 각각의 엔트리는 판독 포트(206)로부터 도입되는(incoming) 키 값이 엔트리에 대해 저장된 키 값과 매칭되는지를 결정하는 비교 논리를 포함한다. CAM 블록(304)은 저장된 모든 키 값들이 고유(unique)해지도록 관리될 수 있다. 이는 임의의 액세스된 키가 단지 하나의 엔트리와 매칭되게 보장한다. 매칭된 엔트리에 대한 데이터 워드가 출력된다. 따라서, CAM 블록(304)은 요청된 키 값-(키 필드의) 콘텐츠 어드레스가능 메모리가 매칭되는 엔트리에 대한 데이터 부분을 출력한다.
[0038] CAM 블록(304)은 CAM 블록(304)의 모든 유효 CAM 엔트리들로부터 단지 하나(at most one)가 임의의 액세스된 키 값과 매칭되는 방식으로 관리될 수 있다. 이는 실시예에 따라, 쓰레드 FIFO에 대해 큐 오더에서 얼마나 많은 다른 엔트리들이 이러한 엔트리를 선행하는지를 표현하는 제 1 필드 및 제 2 필드의 조합인 키를 만듬으로써 달성된다. 예를 들어, 도 3을 참조로, 쓰레드 wid_l이 참조된다. 쓰레드 FIFO는 도시된 것처럼 2개의 유효 엔트리들을 갖는 CAM 블록(304)의 해당(this) 쓰레드에 할당된다. /0 엔트리는 해당 쓰레드에 대한 큐의 헤드에 있으며, 순차적 /1 엔트리는 다음 라인에 있다. 따라서, 상호접속부가 쓰레드 wid_l에 할당된 큐의 헤드로부터 판독을 시도할 경우, 우측(right) CAM 엔트리를 효율적으 로 표시하도록, 실제(as it is) 기록 및 판독되는, 큐의 트랙을 유지하는 카운터의 값 및 wid_1를 조합한 키 값이 생성될 필요가 있다. CAM는 쓰레드 당 하나의 원칙(a per thread basis)에 따라, CAM에 저장되는 쓰레드의 요청들의 로컬 오더(local order of requests)를 생성한다.
[0039] (쓰레드 wid_l에 연관된) 큐의 헤드를 판독하기 위해, 액세스된 키 값으로서 wid_l/0 조합이 생성된다. 이러한 키 값은 도 3에 도시된 엔트리(306)에만 매칭되어야 한다. 데이터 워드 필드(308)의 값은 매칭 엔트리의 출력이 된다. 데이터 워드 필드(308)는 쓰레드의 요청 또는 응답의 페이로드를 포함하며, FIFO에 초기에 기록된다. 매칭 이후, 필드들(306, 308)과 연관된 엔트리가 무효화되어(invalidated), wid_l와 연관된 큐에 의해 또는 다른 쓰레드와 연관된 큐에 의해, 재사용에 이용가능해진다. 이제 카운터 논리는 wid_l/l를 wid_l/0로 변경시켜 다음 엔트리, 특히 엔트리의 키 필드(310)를 업데이트한다(즉, 엔트리는 큐의 헤드에 있게 된다). 이러한 예시적 방안에서, 수신된 wid 및 기록 오더(worder)의 각각의 조합에 대한 CAM 블록(304)의 기록 포트에서 생성된 입력 키는 단순히 2개 필드들의 합성(concatenation)이 된다. 대안적으로, CAM 블록(304)에 저장된 다른 모든 것과 별개로, 특정 버퍼의 특정 엔트리를 식별하는 한 키는 다르게 정의될 수 있다. CAM 블록(304)에 공급되는 액세스된 키를 생성하기 위해, 동일한 기술이 MTSS FIFO(202)의 판독 포트에서 이용될 수 있다.
[0040] 하기의 것은 앞서 개시된 기능을 가능케하는 다른 논리 블록들의 설명에 따라 예시적 CAM 엔트리로 착수되는 실시예에 따른 MTSS FIFO의 상세한 설명 이다.
[0041] 도 2 및 도 3을 참조로, MTSS FIFO(202)는 페이로드 폭(PWIDTH) 및 이를 지원할 수 있는 다수의 쓰레드들(THREADS)로 구성될 수 있다. 또한, 저장 지점들(locations) 또는 엔트리들(BUFFERS)의 전체 수가 구성될 수 있다. 각각의 쓰레드에 대한 할당이 구성될 수 있다(MAX_CNT[t]).
[0042] MTSS FIFO는 모든 쓰레드들에 대해, 모든 MAX-CNT들의 합과 같은 BUFFERS를 할당함으로써, 비차단 멀티-쓰레드 FIFO로서 구성될 수 있다. 대안적으로, 이는 모든 쓰레드들에 대한 모든 MAX_CNT들 중 가장큰 것보다 크고 모든 쓰레드들에 대한 모든 MIN CNT들의 합 보다 큰 BUFFERS를 할당함으로써, 정적인 비차단 멀티-쓰레드 FIFO로서 구성될 수 있다. 이 경우, 풀(full) FIFO는 정적으로 희귀한 경우로 다른 FIFO들을 통해 진행이 느려질 수는 있지만, 다른 FIFO들에 대한 진행은 결코 중단되지는 않는다. 마지막으로, MTSS FIFO는 적어도 하나의 쓰레드에 대해 MAX_CNT 미만인, 또는 THREADS 미만인 BUFFERS를 할당함으로써 차단 멀티-쓰레드 FIFO로서 구성될 수 있다.
[0043] MTSS FIFO는 쓰레드 당 하나의 원칙으로, FIFO 사용(busy) 상태(fifo_full)를 제공할 수 있다. MTSS 기록 데이터 또는 페이로드가 기록되게 허용하며, 쓰레드 및 페이로드는 기록 제어 신호와 연관된다. 또한, MTSS는 쓰레드 당 하나의 원칙으로 비어 있지 않은 신호(not empty signal)(id_active) 및 비어 있지 않은(not empty) FIFO (fifo_active) 상태 출력을 제공할 수 있다. MTSS 판독 포트는 판독 제어 신호로부터 판독되는 쓰레드 및 판독되는 페이로드로 간주된 다.
[0044] 도 4를 참조로, CAM 블록(304)의 일부인 예시적인 CAM 엔트리(403)의 논리 다이어그램이 도시된다. CAM 엔트리(또는 CAM 셀)(403)는 페이로드의 단일 워드(single word)가 콘텐츠 어드레스가능 형태로 저장되고 리트리브되는(retrieved) 것을 허용한다. 엔트리가 저장된 유효 워드를 보유하는지 또는 보유하지 않는지를 나타내는 유효 레지스터(408)가 제공된다. 페이로드 레지스터(402)는 페이로드 또는 기록 데이터를 저장한다. 페이로드 레지스터(402)의 콘텐츠는 쓰레드와 연관되기 때문에, 이러한 연관성을 저장하기 위해 쓰레드 레지스터(406)가 제공된다. 또한, 특정 쓰레드 FIFO의 다중 엔트리들은 동일 쓰레드와 연관된 페이로드를 포함할 수 있기 때문에, 연관된 쓰레드에 대해, FIFO 오더에 보유되는 이러한 특정 엔트리의 배치를 저장하기 위해 오더 레지스터(410)가 제공된다. 엔트리가 이와 연관되는 쓰레드 FIFO의 헤드에 있는지 여부를 나타내기 위해 헤드 레지스터(404)가 제공된다.
[0045] CAM 엔트리(403)는 write 및 wsel 입력들 모두가 확정될 때 로딩된다. 이는 유효 레지스터(408)를 확정하며 기록 데이터 입력(wdata)으로부터 페이로드 레지스터(402)를 로딩한다. 또한, 쓰레드 레지스터(406)는 쓰레드 id 입력 벡터(wid)로부터 로딩된다. 오더 레지스터(410)는 worder로 로딩된다(이러한 신호가 어떻게 생성되는지에 대해서는 도 6을 참조한다). 헤드 레지스터(404)는 worder의 값에 기초하여 적절히 로딩된다. 특히, worder가 0이면, 헤드는 1로 설정되며 이는 엔트리가 큐의 헤드에 있다는 것을 나타낸다. 그렇지 않은 경우, 헤 드는 0으로 설정된다. 이는 쓰레드 FIFO가 쓰레드 테일(tail)에 기록되게 한다.
[0046] 액세스 동작은 판독 입력(rid)상에 쓰레드 번호(thread number)를 배치함으로써 CAM 엔트리(403)에 대해 수행된다. CAM 엔트리가 유효하고 쓰레드 레지스터(406)가 rid로 표시된 것과 동일한 값을 갖는다면, read hit가 표시된다. 또한, 엔트리가 연관된 쓰레드에 대한 FIFO 오더의 헤드에 있다면(head == 1), 엔트리는 판독을 위해 선택된다(rsel == 1). 엔트리가 판독되게 선택되면, 페이로드 레지스터(402)의 콘텐츠들이 판독 데이터 출력(rdata) 상에 제공된다. 이는 쓰레드 FIFO가 헤드로부터 판독되게 한다.
[0047] 판독 입력이 확정되면 판독 동작이 수행되고, rid 입력 상의 값은 read hit를 산출한다. 헤드가 확정되면, 판독 동작은 헤드 및 유효부(valid) 모두를 0으로 설정한다. 헤드가 확정되지 않는 경우, 오더 레지스터(410)가 값 1을 포함하면 판독 동작은 헤드를 1로 설정한다. 헤드가 확정해제되면(deasserted), 판독 동작은 오더 레지스터(410)의 값의 감소를 나타낸다. 이러한 엔트리와 연관된 FIFO가 판독됨에 따라, 각각의 엔트리내에서의 이러한 논리 배치는 CAM 키의 값을 동적으로 확립한다(establishes). 각각의 CAM 엔트리 내에서의 이러한 논리 배치는 CAM에 저장된 주어진 쓰레드 내에서 요청들의 로컬 오더를 동적으로 확립한다. 오더 블록은 현재 시간에서의 이러한 공유 저장기 큐에서, 쓰레드 내의 요청들의 로컬 오더를 나타낼 수 있다. 값은 CAM에 엔트리로서 요청이 기록되는 시기에, 쓰레드 ID에 대해 CAM에 저장된 다수의 요청들에 기초하여 초기에 결정될 수 있으며, 이후 쓰레드에 대한 판독 액세스들이 이루어짐에 따라 동적으로 변경될 수 있다. 헤드 블록은 주어진 쓰레드에서 요청들에 대한 큐의 헤드로부터 적절한(in time) 근접도(proximity)를 결정하기 위한 미리보기(look ahead) 기능을 제공할 수 있다.
[0048] CAM 키는 내부적으로 생성될 수 있고, 2개의 필드를 포함할 수 있다. 제 1 필드는 현재 엔트리가 어떤 FIFO에 할당되었는지를 식별하는 쓰레드 번호(thread number)이다. 제 2 필드는 동일한 FIFO에 대한 FIFO 오더에서 얼마나 많은 엔트리들이 이러한 엔트리를 우선하는지를 나타내는 오더 번호(order number)이다. (CAM에 대해) 외부 카운터는 이러한 값을 유지할 수 있다(그리고 FIFO에 대한 흐름 제어 논리에 기초한 신뢰도(credit)로 효율성을 공유한다). 제 1 필드는 엔트리가 유효한 기간 동안 정적이다. 쓰레드 번호는 엔트리가 기록될 때 할당되며 엔트리가 사용중인 한 변경되지 않는다.
[0049] CAM 엔트리들은 제 2 필드가 동적이도록, 추출(extract) 논리로 설계된다. 본 예에서 여분의 논리는 감산기(decrementer) 및 제 2 부분 키(partial key) 비교기 모두를 포함한다. 동일 FIFO에서 선행(preceding) 엔트리가 (부분 키 비교기에 의해 검출된) CAM로부터 판독될 때마다, 필드는 감소를 나타낸다. 이는 FIFO의 헤드에 있는 각각의 FIFO에 대해 임의의 시간 포인트에 정확히 하나의 엔트리가 제공된다는 것을 의미한다. 이는 쓰레드가 CAM로부터 액세스될 때 출력되는 (정상(normal) 엔트리 키 비교기에 의해 매칭되는) 엔트리이다. 엔트리가 출력될 때, 이는 무효화되고 동일한 또는 서로 다른 FIFO에 의해 재사용되도록 이용될 수 있게 된다.
[0050] 이러한 방안의 장점은 매칭 판독 액세스를 위한 데이터 워드 페이로 드가 큐의 헤드에 이미 로딩되었고 쓰레드에 대한 rsel 신호의 수신만이 데이터 워드에 대해 rdata 판독 포트로부터 전송될 것을 요구하기 때문에, 보다 빠른 판독 액세스가 이루어질 수 있다는 것이다.
[0051] 상호접속부의 응답 흐름 제어 측에 대해 오더링된 큐에서 응답들에 대한 오더를 설정하기 위한 유사한 하드웨어가 존재할 수 있다는 것이 주목된다.
[0052] 도 5를 참조로, CAM 엔트리들(0, 1, ... FD-1)의 수집부를 나타내는 CAM 블록(304)의 상세도가 제공된다. 도 5의 도면은 페이로드의 다중 워드들이 저장되는 CAM 저장부를 나타낸다. 각각의 페이로드 워드는 쓰레드 스트림내에서의 위치 또는 오더를 갖는다. 워드들은 쓰레드 어드레스가능 형태로 리트리브된다. 제시된 본 예에서, 저장 오더는 FIFO 룰을 따른다. CAM 저장부는 저장부의 워드들의 수(FD), 페이로드의 폭(PWIDTH), 쓰레드 ID들의 폭(IWIDTH), 및 오더 벡터들의 폭(OWIDTH)으로 구성될 수 있다. 여기서, FD 및 BUFFERS는 전체적으로 MTSS FIFO의 "크기(size)"를 표현한다. CAM 저장부 내에서 각각의 저장 지점은 CAM 엔트리(403)의 인스턴스(instance)이다. 기록 데이터(wdata), 기록 ID(wid), 및 기록 오더(worder) 입력 벡터들은 모든 엔트리들로 병렬로 전송된다. 마찬가지로 판독 ID(rid) 입력 벡터, 및 판독 명령 비트는 모든 엔트리들로 병렬로 전송된다.
[0053] 각각의 엔트리는 단일 유효 신호를 생성하며, 이들은 내부, 유효 벡터로 수집된다. 우선순위(priority) 인코더를 사용하여, 모든 엔트리들이 채워지면(full), wsel는 모두 확정해제되어, 기록을 위해 엔트리가 선택되지 않는다. 기록 포트에서 추가의 기록들이 표시되면((중복기재(overwrite)라 불림), 이들은 무시된다. 모든 엔트리들이 채워지지 않으면, wsel는 유효하지 않은 엔트리들 중 정확히 하나를 선택하여, 유효 엔트리의 중복기재가 발생하지 않는다.
[0054] 엔트리가 기록될 때, worder 입력은 쓰레드와 연관된 유효 엔트리들의 수를 반영한다. 예를 들어, worder가 1이면, 쓰레드에서 단지 하나의 유효 엔트리만이 제공된다. 이러한 요구조건이 충족되면, 쓰레드와 연관된 모든 엔트리들은 고유한(unique) 오더 값들을 갖게 되며, 이러한 값들은 액세스 오더를 표현한다. 특히, 각각의 쓰레드와 연관된 단지 하나의 유효 엔트리는 0의 오더 값을 가질 것이다. 이는 rid 상의 값은 유효 엔트리들이 존재하는 쓰레드인 경우, 쓰레드와 연관되며 0의 오더 값을 갖는 단일 엔트리는 엔트리로부터 rdata상에 출력된다는 것을 의미한다. 다른 모든 엔트리들은 rdata 상에 모두 0들을 출력한다. 다른 말로, 쓰레드가 판독되는 것으로 식별될 때, 쓰레드와 연관된 FIFO의 헤드에서 페이로드 워드만이 CAM 블록의 출력에 제공된다. 이는 모든 엔트리들로부터 rdata에 대해 간단한 OR를 수행하고, 결과를 출력하는 CAM 저장부에 의해 달성된다. rid가 엔트리가 유효하지 않은 쓰레드를 선택하면, rdata는 모두 O들을 출력한다.
[0055] 판독이 확정되면, (FIFO의 헤드에서) 0의 오더 값을 갖는 엔트리는 무효화된다. rid 상의 쓰레드 값과 연관된 다른 모든 엔트리들은 감소되는 오더 값들을 가질 것이다. 앞서 언급된 worder 엔트리 속성을 따를 경우, 이러한 판독 감소치(read decrement)는 0의 오더 값을 갖는 새로운 고유한 엔트리를 선택할 것이다.
[0056] 도 6을 참조로, 상태 블록(320)(도 3 참조)의 블록 다이어그램이 제 공된다. 상태 블록(320)은 각각의 쓰레드에 대한, 그리고 전체적으로 MTSS FIFO에 대한 유효 엔트리들의 카운트를 유지한다. 블록(320)은 각각의 쓰레드에 대한 FIFO 오더를 유지하는 worder 값들을 제공한다. 블록(320)은 쓰레드들의 수(THREADS), 및 쓰레드 ID 폭들(IWIDTH)과 관련하여 구성될 수 있다. 각각의 쓰레드에 대해 단일 상태 카운터 셀(420)이 제공된다. 쓰레드 당 FIFO 깊이는 MAX_CNT에 의해 제공된다.
[0057] (쓰레드와 연관된) 각각의 카운터 셀(420)은 id_full 및 id_active 상태 출력들에 단일 비트를 제공한다. wid 입력 벡터는 THREADS 비트 0-1-hot wrt 벡터를 생성하도록 기록 입력에 의해 디코딩 및 인에이블링된다(enabled). 하나의 비트가 각각의 상태 카운터 셀(420)에 접속된다. 유사하게, rid 입력 벡터는 THREADS bit 0-1-hot rd 벡터를 생성하도록 판독 입력에 의해 디코딩 및 인에이블링된다. 하나의 비트는 각각의 상태 카운터 셀(420)에 접속된다. 셀 상태 카운터의 개별 인스턴스(separate instance)는 전체적으로 MTSS FIFO에 대해 생성된다(fifo_cnt). 카운터의 인스턴스로부터의 상태 출력은 (쓰레드 당) 다른 상태 카운터 인스턴스들 모두의 스톨(stall) 입력으로 팬-아웃된다(fanned out). 이런 방식으로, 전체로서 MTSS FIFO가 채워지면, 모든 THREADS는 full을 나타낸다.
[0058] wid에 의한 기록을 위해 쓰레드가 선택될 때, 상태 블록은 쓰레드에 대한 현재 테일(tail) 값을 worder 상에 출력한다.
[0059] MTSS FIFO의 실시예의 엘리먼트들에 대한 상기 설명으로, MTSS FIFO에 대한 예시적인 동작 시퀀스가 제공된다. 리셋(reset)에 이어, 모든 상태 카운 터들은 0의 테일 값을 가지며, 활성적이지 않고 채워지지 않는다(not full). 모든 엔트리들이 유효하지 않을 수 있다. rdata 출력은 rid 값과 상관없이 모두 0들이다.
[0060] 이 때 쓰레드가 채워지지 않기 때문에, 입력 페이로드가 유효화(기록)될 때 기록을 위해 임의의 쓰레드가 제공될 수 있다(wid). 상태 블록(320)은 선택된 쓰레드에 대해 worder=0을 지정하며, 페이로드, 선택된 쓰레드, 및 worder는 CAM 블록(304)에서 단일의, 기록 선택 엔트리로 로딩된다. 선택된 쓰레드에 대한 테일 카운터는 1로 증감되어, 쓰레드에 대한 id_active 비트가 확정되게 된다.
[0061] 다음, 상호접속부(118)는 id_active 벡터상에서 작용하는 중재자(arbitrator)를 가지며, MTSS FIFO로부터 제공되도록 위닝 쓰레드(winning thread)를 선택하는 것으로 가정한다. 위닝 쓰레드는 rid 상에서 MTSS FIFO로 표시된다. 이는 rdata가 쓰레드에 대한 유효 헤드 엔트리를 출력하게 한다. 이러한 출력 페이로드가 MTSS FIFO의 다운스트림을 허용하면, 이는 판독을 확정함으로써 표시된다. 이때, MTSS FIFO에서 선택된 쓰레드에 대한 테일 카운터는 감소하게 될 것이다. 또한, 쓰레드에 대한 유효 헤드 엔트리는 무효화될 것이다. 이러한 것이 판독 선택 쓰레드와 연관된 최종 CAM 엔트리인 경우, 쓰레드에 대한 테일 카운터는 0으로 감소되어, 쓰레드에 대한 활성 비트가 확정해제된다. 이는 다운스트림 중재로부터의 추가 액세스로부터 쓰레드를 소거해야 한다.
[0062] MTSS FIFO의 엔트리들이 기록될 때, CAM 블록에 생성된 worder는 쓰레드에 대한 테일 카운터로부터 생성되며, 카운터는 증감된다. 이는 동일한 쓰레 드와 연관된 순차적 엔트리들이 기록됨에 따라 반복된다. 이는 쓰레드에 대한 유효 CAM 엔트리들이 항상 연속하는 worder 번호들, 본 예에서는 0, 1, 2, ... N를 가질 수 있다는 것을 의미한다. 쓰레드에 대한 CAM 엔트리가 판독될 때, 쓰레드에 대한 모든 엔트리들은 감소되는 이들의 worder 값들을 가지며, worder=0 엔트리는 무효화된다. 이는 연속하는 worder 번호들 0, 1, 2, ... N-1을 보존한다. 또한, 테일 카운터는 판독시 감소되어, CAM 블록에서 가장 큰 수의 유효부에 대한 추적이 이루어진다. worder=0을 갖는 CAM 엔트리는 연관된 FIFO의 헤드로서 마킹되며 쓰레드에 대한 rdata로서 발생된다. 따라서, FIFO 액세스는 동시적 다중 쓰레드들에 대해 MTSS에 의해 유지된다.
[0063] 앞서 개시된 실시예는 비교적 효율적이며 FIFO 판독 및 기록 요청들에 대해 비교적 신속한 응답으로 MTSS FIFO를 제공한다는 것을 주목해야 한다. 대안적인 보다 덜 최적의 방안(less optimal solution)이 각각의 헤드에 대해 개별 헤드 및 테일 카운터들을 사용하여 MTSS FIFO, 특히 CAM 블록(304)을 구현할 수 있고, 입력 쓰레드 벡터(예를 들어, rid)에 대한 룩업 테이블은 요청된 쓰레드 FIFO의 헤드에 있는 CAM 엔트리를 지시한다(point). 원칙적으로 보다 간단한 방안이 있지만, 이는 도 3-6과 관련하여 앞서 개시된 실시예 보다는 많은 논리 게이트가 있을 뿐만 아니라 속도 또한 느릴 것으로 예상된다.
[0064] 도 6을 참조로, 실시예에서, CAM의 공간에 대한 모든 엔트리들은 선착순 원리에 따라 CAM로 도입되는 모든 쓰레들에 의해 공유된다. 카운터 논리는 모든 개별 쓰레드 카운터들에 의해 표시되는 요청들의 수가 CAM에 대한 세트 값 이 상인지를 결정한 다음, CAM이 채워졌다는 것을 나타내는 신호들을 출력하고, 도입되는 요청을 전송하는 콤포넌트로 다시 쓰레드 사용 신호를 전송한다. 실시예에서, CAM는 큐에 할당된 각각의 쓰레드에 대해 최소 수의 엔트리들로의 액세스를 보장하며 선착순 원칙에 따라 모든 쓰레드들에 의해 실제 공유될 수 있는 큐에서의 나머지 공간을 채우는 추가의 엔트리들로의 액세스를 보장할 수 있다. 또한, 쓰레드에 대한 카운터는 쓰레드에 대해 보장된 최소 값 세트를 가질 수 있고, 각각의 쓰레드 카운터는 저장된 요청들의 수가 쓰레드에 대해 보장된 최소 값 세트와 같거나 이를 초과할 때 신호를 출력할 수 있다. 본 실시예에서, 전체 CAM에 대한 유효 엔트리들의 최대 수를 나타내는 모든 신호가 충족되고, 쓰레드 사용 신호가 쓰레드에 대해 도입되는 요청에 응답하여 전송되기 이전에, 유효 엔트리들의 보장된 최소 수를 나타내는 신호가 확정되게 (쓰레드에 대해) 충족된다.
[0065] 앞서 개시된 공유 저장기, 멀티-쓰레드 오더링된 큐 설계의 장점은 하기 예로써 예시될 수 있다. P를 또 다른 기술을 사용하여 멀티-쓰레드 비차단 FIFO들을 구현하는 블록으로 정한다. N은 실시예에서 사용되는 멀티-쓰레드 비차단 FIFO를 구현하는 블록으로 정한다. 양(both) 블록들은 T FIFO들로 구현된다 가정한다. 각각의 FIFO는 FIFO에 대한 최대 전송속도들(peak burst rate)을 보장하기 위해 요구되는 최소 크기 min_size(t)를 갖는다. 각각의 FIFO는 쓰레드 FIFO와 연관된 입력 및 출력 프로세스들의 충분한 디커플링을 보장하기 위해 요구되는 최대 크기 max_size(t)를 갖는다. 양 블록들(P 및 N)은 모든 T FIFO들에 대해 동일한 min_size(t) 및 max_size(t) 값들을 구현한다 가정한다.
[0066] 블록들(P 및 N)의 구현 크기들을 비교한다. 구현을 위한 게이트 카운트들의 제 1 오더 비교는 요구되는 저장 엔트리들의 전체 수를 검사함으로써 제공될 수 있다. 이러한 근사화(approximation)는 엔트리당 비용이 P 및 N에 대해 거의 동일하다고 가정한다. FIFO들의 수(T) 및 가장큰 max_size(t)가 상당히 작은 수라면, 엔트리들의 페이로드 사이즈가 우세(dominate)해질 것이며, 이러한 가정이 유지될 것이다.
[0067] 블록 P는 T개의 개별 단일 쓰레드 FIFO를 병렬로 구현된다. 각각의 FIFO는 max_size(t) 엔트리들을 보유하도록 충분히 크다. 블록 P에 대한 엔트리들의 전체 수는 모든 T FIFO들에 대한 max_size(t)의 합이다.
Figure 112009079347036-PCT00001
[0068] 블록 N은 단일 공유 저장기 CAM를 구현한다. 모든 T FIFO들에서 min_size(t)가 동시적으로 충족되도록 충분한 엔트리들이 제공된다. FIFO들 중 임의의 하나가 활성화되고 완전히(fully) 디커플링될 수 있도록 추가의 엔트리들이 제공된다.
Figure 112009079347036-PCT00002
[0069] N_entries가 P_entries 보다 작다는 것은 명확할 것이다. 1 FIFO에 대해, N 블록은 디커플링을 위해 max_size(t)-min_size(t) 및 피크를 위해 min_size(t)를 갖는다. 이는 블록 P와 동일한 수를 갖는 FIFO에 대해 max_size(t) 를 갖는다. 다른 모든 FIFO들에 대해, 블록 N은 min_size(t) 엔트리들을 갖는 반면 블록 P는 max_size(t) 엔트리들을 갖는다. 임의의 이러한 FIFO들에 대해 max_size(t) > min_size(t)이면, 블록 N은 블록 P보다 적은 수의 엔트리들을 갖는다.
[0070] 쓰레드들 간에 대칭성(symmetry)을 가정함으로써 간단한 예를 볼 수 있다. 8개의 쓰레드 블록(T=8)을 살펴본다; 여기서 각각의 쓰레드는 쓰레드간(inter-thread) 차단이 없는 것을 보장하기 위해 1개의 엔트리를 갖는다(모든 t에 대해 min_size(t) = 1); 그리고 각각의 쓰레드는 풀(full) 피크 대역폭을 유지하기 위해 2개의 엔트리를 필요로 한다(모든 t에 대해 max_size(t) = 2).
Figure 112009079347036-PCT00003
[0071] 블록 N은 단순히 공통적인 경우에서 블록 P 크기의 62.5%이다. 본 발명의 본 실시예는 구현 비용을 이전 값의 62.5%로 감소시켰다. 따라서, 공유 다중 쓰레드 비차단 오더 큐는 멀티-쓰레드 비차단 FIFO 기능의 구현 비용을 낮추고 성능 최적화를 간략화시킨다. 비동기식 멀티- 쓰레드 FIFO
[0072] 실시예는 2개의 FIFO들의 시리즈로서 비동기식 멀티-쓰레드 FIFO를 구현한다. 시리즈에서 제 1 FIFO는 단일 쓰레드 비동기식 FIFO이다. 시리즈에서 제 2 FIFO는 동기식 멀티쓰레드 FIFO이다.
[0073] 시리즈 방식이 갖는 장점은 멀티-쓰레드 동기식 FIFO의 구현 비용이 멀티쓰레드 비동기식 FIFO의 비용보다 상당히 작다는 것이다. 이러한 충분한 게이트들은 (단일 쓰레드이기 때문에) 시리즈들의 전방에서 여분의 FIFO의 비용이 상쇄되도록 동기식 구현으로 멀티-쓰레드 FIFO를 구현함으로써 절감된다.
[0074] 도 7을 참조로, 본 도면은 멀티-쓰레드 비동기식 FIFO의 구현을 나타낸다. 대조적으로, 도 8은 2개의 스테이지들을 갖는 멀티-쓰레드 비동기식 FIFO의 또 다른 구현을 나타낸다. 점선 박스는 비동기식 멀티-쓰레드 FIFO 보다는, N+1의 단일 쓰레드 FIFO들(808)로 이루어진 동기식 멀티-쓰레드 FIFO 부분(806)이라는 것이 주목된다.
[0075] 도 7의 통상의 구현 방법이 바로 비차단형이라는 것이 주목되며, 이는 각각의 쓰레드에 대해 개별 FIFO들이 병렬로 구현되기 때문이다. 이들 중 하나가 채워지면, 다른 쓰레드에 대해 병렬 경로들이 존재한다.
[0076] 도 8의 2 스테이지 FIFO의 구성은 반응(behavior)을 차단하기 위한 가능성을 생성한다. 단일 쓰레드 비동기식 FIFO(804)는 모든 쓰레드들에 대한 경로의 공통 포인트이다. 멀티-쓰레드 동기식 FIFO 부분(806)의 쓰레드가 채워지고(full), 쓰레드에 대한 새로운 엔트리가 비동기식 단일 쓰레드 FIFO(804)에 기록되면, 엔트리는 진행될 수 없다. 차단된 엔트리 다음에(behind) 비동기식 단일 쓰레드 FIFO(804)에 기록된 엔트리들은 차단된 엔트리가 진행될 때까지 진행될 수 없다.
[0077] 이러한 차단 반응을 방지하기 위해, 본 실시예는 멀티-쓰레드 동기식 FIFO 부분(806)에서 엔트리 저장을 위해 이용가능한 공간이 있는지가 인지되지 않는다면, 단일 쓰레드 비동기식 FIFO(804)에 엔트리를 기록하는 것을 방지한다. 따라서, 전체적으로 도 8의 2 스테이지 MT FIFO는 결코 차단되지 않는다. 이러한 특성을 보증하기 위해 사용되는 기술은 신용도(credit) 기반 흐름 제어라 불린다. 기록 클록 도메인에서의 논리 블록은 신용도들을 관리하며 각각의 쓰레드에 대한 기록 포트 채움(full) 상태를 보증한다.
[0078] 신용도 기반 흐름 제어는 각각의 쓰레드에 대한 카운터를 유지한다. 카운터는 멀티-쓰레드 동기식 FIFO 부분(806)에서 쓰레드에 대해 이용가능한 엔트리들의 수로 초기화된다. 쓰레드에 대한 엔트리가 단일 쓰레드 비동기식 FIFO(804)에 기록될 때 마다, 쓰레드에 대한 카운터 값은 감소된다. 카운터 값이 0이 될 때, 쓰레드는 채워진 것(full)으로 표시되어, 쓰레드에는 추가의 엔트리들이 제공되지 않는다. 쓰레드에 대한 각각의 엔트리가 블록으로부터 판독됨에 따라, 판독 명령은 판독 클록 도메인에서 기록 클록 도메인으로 전송되고 동기화된다. 이는 쓰레드 신용도 카운터를 증가시키는데(새로운 신용을 할당하는데) 이용된다.
[0079] 앞서 개시된 공유 저장기 방안의 장점은 하기 논의에서 인식될 수 있는 비동기식 MT FIFO의 설정시 명확해진다. 멀티-쓰레드 FIFO의 기록 포트 및 판독 포트가 개별 클록 도메인들인 경우 ― 소위 비동기식 멀티-쓰레드 FIFO ―, 비동기식 크로싱(crossing)은 FIFO 포인터들의 관리를 위해 흐름 제어 루프를 연장시킨다(lengthen)는 것을 주목해야 한다. 결과적으로 max_size(t) 수들은 풀 피크 대역폭 가능성이 유지되는 경우 성장하는 경향이 있다. 통상의 더블 랭크 동기화는 비동기식 경계(asynchronous boundary)에서의 준안정성(metastability)을 관리하는데 이용되며, 포트들 간의 클록 속도 비율이 제한되지 않으면, 대역폭을 제한하지 않는 크로싱 FIFO를 보증하기 위해 6의 max_size(t)가 요구될 수 있다.
[0080] 이 경우, 본 발명의 실시예는 2 FIFO들의 시퀀스로서 비동기식 멀티-쓰레드 비차단 FIFO를 생성한다. 시퀀스에서 제 1은 통상의 단일 쓰레드 FIFO이며, 클록 비율이 무엇인지와는 상관없이 전체 전송률들(full rates)을 보증하도록 충분히 크다(이를 테면, max_size(t) = 6). 제 2 FIFO는 앞서 개시된 MTSS FIFO의 실시예의 동기식 버전이다. 신용도 기반 흐름 제어는 단일 쓰레드 크로싱 FIFO가 바람직하게 크로싱을 차단하지 않는 것을 보장하기 위해 비동기식 경계에 대해 이용된다. 제 2 FIFO로의 추출을 위해 엔트리들을 위한 룸이 항상 제공된다.
[0081] 앞서 개시된 동일한 8개의 스레드 FIFO를 참조하나, 비동기식 사용의 경우를 고려한다. max_size(t)가 성장되기 때문에, P의 크기가 상당히 성장했다.
Figure 112009079347036-PCT00004
[0082] 동기식 공유 저장기 FIFO의 크기는 이전 예에서 계산된 것과 동일한 방식으로 계산되나, N_decouple은 보다 큰(bigger) max__size(t) 값을 반영한다. 부가적으로, 단일 쓰레드 비동기식 FIFO는 6개의 추가 엔트리들을 갖는다.
Figure 112009079347036-PCT00005
[0083] 블록 N은 이러한 새로운 및 공통의 경우 블록 P 크기의 39.6%이다. 본 실시예는 성능 손상 없이 이전 구현 비용 값의 39.6%로 구현 비용을 감소시켰다. EDA 툴셋
[0084] 도 9는 상호접속부에 대해 앞서 개시된 설계들 및 개념들을 갖는, SoC와 같은 디바이스를 생성하기 위한 예시적인 프로세스의 흐름도를 나타낸다. 프로세스는 전자 설계 자동화(EDA) 툴셋의 일부인 SoC 컴파일러와 같은 전자 회로 설계 생성기를 이용할 수 있다. 하드웨어 논리, 코딩된 소프트웨어, 및 이들의 조합은 EDA 툴셋의 실시예를 사용하는 하기 설계 프로세스 단계들을 구현하는데 이용될 수 있다. EDA 툴셋은 2개 이상의 개별 툴들의 편집물 또는 단일 툴일 수 있다. 상호접속부의 회로에 대한 콤포넌트들 및/또는 프로세스 동작들을 나타내는 정보는 셀 라이브러리, 전자 회로 설계 생성기의 소프트 명령들, 이러한 정보를 저장하는 기계-판독가능 저장 매체 내에 포함될 수 있다.
[0085] 상기 설계의 양상들은 상호접속부 및 연관된 부품들을 구성하는 콤포넌트들에 대한 설계들의 세트를 포함하는 소프트웨어 라이브러리의 부분들일 수 있다. 라이브러리 셀들은 산업 규격들에 따라 개발된다. 설계 엘리먼트들을 포함하는 파일들의 라이브러리는 EDA 툴셋 뿐만 아니라 자체적인 단독형(stand-alone) 프로그램일 수 있다.
[0086] 예시적인 EDA 툴셋은, 그래픽 사용자 인터페이스; 처리 엘리먼트들의 공통 세트; 및 회로들, 제어 논리, 및 셀 어레이들을 나타내는 설계 엘리먼트들을 포함하는 파일들의 라이브러리를 포함할 수 있다. EDA 툴셋은 회로 설계 생성, 설 계를 테스트, 및/또는 타겟 칩 상에서 이용가능한 공간에서의 설계 레이아웃 배치를 위한 다수의 알고리즘들 및 설계들을 포함하는 하나 이상의 소프트웨어 프로그램들일 수 있다. EDA 툴셋은 실행가능한 소프트웨어 프로그램들의 세트에서의 목적 코드(object code)를 포함할 수 있다. EDA 툴셋의 인터페이스들 및 애플리케이션-특정 알고리즘들의 세트는 특정 애플리케이션에 대한 IP 코어들의 전체 시스템 또는 개별 IP 코어를 신속하게 생성하기 위해 시스템 집적회로(IC) 적분기들에 의해 이용될 수 있다. EDA 툴셋은 타이밍 다이어그램들, 각각의 콤포넌트의 전력 및 면적(area) 양상들을 제공하며, 실제 동작 및 구성 시뮬레이션을 실행하기 위해 콤포넌트들을 표현하도록 코딩된 모델들로 시뮬레이션된다. EDA 툴셋은 타겟 칩 상에서 이용가능한 공간에 맞도록(to fit) 목표된 레이아웃 및 네트리스트를 생성할 수 있다. 또한, EDA 툴셋은 기계-판독가능 저장 매체 상에 논리 회로 및 상호접속부를 표현하는 데이터를 저장할 수 있다.
[0087] 일반적으로, EDA 툴셋은 SoC 설계에 있어 2개의 중요한 스테이지들, 즉 프론트-엔드(front-end) 처리 및 백-엔드(back-end) 프로그래밍에 이용된다.
[0088] 프론트-엔드 처리는 SoC 개략도의 설계를 포함하는 설계 및 아키텍쳐 스테이지들을 포함한다. 프론트-엔드 처리는 모델들 접속, 설계의 구성, 시뮬레이션, 테스트 및 아키텍쳐 탐색 동안 설계 튜닝을 포함할 수 있다. 통상적으로, 설계가 시뮬레이션되고 테스트된다. 통상적으로, 프론트-엔드 처리는 SoC 내의 회로들의 시뮬레이션 및 이들이 정확히 작동하는지에 대한 검증을 포함한다. 다음, 테스트되고 검증된 콤포넌트들은 칩 상의 IP 블록들의 일부 또는 단독형 라이브러리 의 일부로서 저장될 수 있다. 프론트-엔드는 서포트 문서화(support documentation), 시뮬레이션, 디버깅, 및 테스트를 관찰한다.
[0089] 블록(2005)에서, EDA 툴셋은 다수 레벨들의 계층(hierarchy)을 갖는 개별 IP 블록의 적어도 일부에 대한 설계 및 구성 파라미터들을 기술하는 데이터를 갖는 사용자-공급 텍스트 파일을 수신할 수 있다. 데이터는 IP 블록에 대한 하나 이상의 구성 파라미터들을 포함할 수 있다. IP 블록 디스크립션(description)은 상호접속부와 같은 IP 블록의 전체 기능일 수 있다. 상호접속부 IP 블록에 대한 구성 파라미터들은 시스템의 어드레스 영역들의 수, 시스템 어드레스들, 데이터가 시스템 어드레스들에 기초하여 라우팅되는 방법 등일 수 있다.
[0090] EDA 툴셋은 IP 블록의 콤포넌트 레벨 제조, 해당(that) 기술에서 셀에 의해 점유되는 크기의 추정, 해당 기술에서 구현되는 콤포넌트 레벨 논리의 동작 전압, 해당 기술에서 기준 셀들에 대한 평균 게이트 지연 등을 구현하기 위해, 제조 프로세스와 같은 사용자-공급 구현 기술 파라미터들 수용한다. 기술 파라미터들은 의도된 구현 기술의 요약에 개시된다. 사용자-공급 기술 파라미터들은 단지 공지된 가능성 범위에 응답하여 제출되는 값 또는 텍스트형 디스크립션(textual description)일 수 있다.
[0091] EDA 툴셋은 IP 블록 설계를 구성하는 각각의 IP 서브콤포넌트에 대해 추상적 실행가능 표현(abstract executable representation)을 생성함으로써 IP 블록 설계를 구분할 수 있다. 각각의 IP 서브콤포넌트에 대한 추상적 실행가능 표현 모델들 TAP(타이밍, 면적 및 전력) 특성들 및 유사(mimics) 특성들은 실제 IP 블록 설계와 유사하다. 모델은 IP 블록의 하나 이상의 반응 특성들에 중점을 둘 수 있다. EDA 툴셋은 IP 블록 설계 전체 또는 부분들의 모델들을 실행한다. EDA 툴셀은 IP 블록의 모델화된 반응 특성들의 결과들을 요약하고 기록한다. 또한, EDA 툴셋은 애플리케이션의 성능을 분석하며 새로운 기술 파라미터들을 갖는 기능 디스크립션(functional description) 또는 IP 블록 설계의 새로운 구성을 사용자가 공급하게 허용할 수 있다. 사용자가 IP 설계 파라미터들의 공급된 구성의 반복들 중 하나의 성능 결과들을 만족하고 기술 파라미터들이 실행된 후, 사용자는 연관된 기술 파라미터들로 최종 IP 코어 설계를 결정(settle)할 수 있다.
[0092] EDA 툴셋은 IP 블록에 대한 합성 스크립들(synthesis scripts)을 생성하기 위해 잠재적인 추가 정보로 추상적 실행가능한 표현으로부터의 결과들을 통합한다. EDA 툴셋은 전체 성능의 결과 및 면적 추정치들이 사용자에게 제공된 후, IP 블록에 대한 다양한 성능 및 면적 목표들(goals)을 설정하기 위해 합성 스크립들을 공급할 수 있다.
[0093] 또한, EDA 툴셋은 사용자 공급 구성 파라미터들 및 구현 기술 파라미터들을 기초로 논리 합성을 위한 IP 블록 설계의 RTL 파일을 생성할 수 있다. 개시된 것처럼, RTL 파일은 레지스터들을 수집부를 갖는 전자 회로를 기술하는 하이-레벨 하드웨어 디스크립션, 부울린 방정식들(Boolean equations), "if-then-else" 명령문들과 같은 제어 논리, 및 복합 이벤트 시퀀스일 수 있다.
[0094] 블록(2010)에서, ASIC 또는 SoC 설계시 개별 설계 경로는 통합 스테이지로 불린다. IP 블록들의 시스템의 통합은 IP 블록의 RTL 파일 및 IP 블록에 대한 합성 스크립들의 생성과 병렬로 이루어질 수 있다.
[0095] EDA 툴셋은 설계 동작을 시뮬레이션하고 설계 동작이 정확히 실행되는지를 검증하기 위한 회로들 및 논리 게이트들의 설계들을 제공할 수 있다. 시스템 설계자는 협력적 동작을 위해(to work together) IP 블록들의 시스템을 코딩한다. EDA 툴셋은 기능적으로 테스트되고, 타이밍 테스트되고, 디버깅되고 유효화될 수 있는 앞서 개시된 회로들의 표현들의 시뮬레이션들을 생성한다. EDA 툴셋은 IP 블록들의 시스템 반응을 시뮬레이션한다. 시스템 설계자는 IP 블록의 시스템 반응을 검증하고 디버깅한다. EDA 툴셋은 IP 코어를 패키징한다. 또한, 기계-판독가능 저장 매체는 본 발명에 개시되는 테스트들의 테스트 시퀀스들을 실행하기 위해 외부 테스터기 및 상호접속부에 대한 명령들을 생성하기 위한 테스트 생성 프로그램을 위한 명령들을 저장할 수 있다. 전자 설계 자동화 기술 분야의 당업자들은 설계 엔지니어가 실체적으로(tangible) 유용한 정보 및/또는 결과들의 생성을 돕기 위한 다른 표현들을 생성하고 이용한다는 것을 알 것이다. 이러한 다수의 표현들은 (추상된 덜 상세한) 하이-레벨 또는 탑-다운 뷰들일 수 있으며, 시스템 레벨로부터 시작되는 전자 설계의 최적화를 돕는데 이용될 수 있다. 부가적으로, 통상적 설계 프로세스는 단계들(phases)로 나뉘며, 각각의 단계 마지막에서 단계에 대한 맞춤형(tailor-made) 표현이 통상 출력으로서 생성되며 다음 단계에 의해 입력으로서 사용된다. 숙련된 엔지니어들은 이러한 표현들을 이용할 수 있고 최종 단계로부터 발생되는 최종 결과들의 품질을 개선시키기 위한 휴리스틱(heuristic) 알고리즘들을 적용할 수 있다. 이러한 표현들은 전자 설계 자동화 분야가 회로들을 설계 하고, 회로들을 테스트하고 검증하고, 회로의 네트리스트들 및 다른 유사한 유용한 결과들로부터 리소그래픽 마스크를 유도하도록 허용한다.
[0096] 다음, 블록(2015)에서, 집적회로 설계 프로세스에서 시스템 통합이 이루어질 수 있다. 일반적으로, 백-엔드 프로그래밍은 콤포넌트들 간의 모든 금속 라인들의 라우팅뿐만 아니라, 칩 레이아웃 상의 회로 엘리먼트들의 배치 및 라우팅 또는 플로어 플래닝(floor planning)과 같은 SoC의 물리적 레이아웃의 프로그래밍을 포함한다. 레이아웃, 물리적 라이브러리 교환 포맷(LEF) 등과 같은 벡-엔드 파일들이 레이아웃 및 제조를 위해 생성된다.
[0097] 생성된 디바이스 레이아웃은 칩에 대한 나머지 레이아웃과 통합될 수 있다. 논리 합성 툴은 IP 코어들의 RTL 설계 파일 및 IP 코어에 대한 합성 스크립트들을 수신한다. 또한, 논리 합성 툴은 셀 라이브러리로부터 설계에 사용되는 논리 게이트들의 특성을 수신한다. IP 블록들의 시스템을 포함하는 SoC를 예증하기 위해 RTL 코드가 생성될 수 있다. 고정된 RTL 및 합성 스크립트들을 갖는 IP 블록들의 시스템이 시뮬레이션되고 검증될 수 있다. 레지스터 전송 레벨(RTL)과 설계의 합성이 이루어질 수 있다. 논리 합성 툴은 게이트 레벨 네트리스트 회로 설계(즉, 모든 IP 서브콤포넌트 블록들을 구성하는 논리 게이트들 및 개별 트랜지스터들의 디스크립션)를 생성하기 위해 RTL 설계를 합성한다. 설계는 Verilog, VHDL(Very-High-Speed Integrated Circuit Hardware Description Language) 또는 SPICE(Simulation Program for Integrated Circuit Emphasis)와 같은 하나 이상의 하드웨어 설계 언어(HDL)의 네트리스트로 출력될 수 있다. 또한, 네트리스트는 설 계에 포함되는 콤포넌트들, 각각이 콤포넌트의 속성들 및 콤포넌트들 간의 상호접속성과 같은 전자 설계의 접속가능성을 기술할 수 있다. EDA 툴세트는 칩 상에서의 XY 좌표들과 같이, 칩 상에서의 이용가능한 공간에서 콤포넌트 배치를 위한 제한들의 부가를 포함하는 콤포넌트들의 플로워 플레닝을 용이하게 하며, 이러한 콤포넌트들에 대한 금속 접속부들을 라우팅한다. EDA 툴세트는 앞서 개시된 회로에 와 유사한 다른 유용한 파생물들(derivations) 또는 제조 동안 칩 상의 회로 설계를 전사하기 위해 IP 코어의 이러한 표현으로부터 생성되는 리소그래피 마스크들에 대한 정보를 제공한다. 따라서, 벡-엔드 프로그래밍은 물리적으로 제조가능한지를 검증하기 위한 레이아웃의 검증을 추가로 포함할 수 있으며 산출되는 SoC는 임의의 기능-방지 물리적 결함들을 포함하지 않는다.
[0098] 블록(2020)에서, 제조 팩토리는 EDA 툴세트의 회로 설계 및 레이아웃으로부터 생성된 리소그래피 마스크들을 이용하는 신호 생성 회로를 갖는 하나 이상의 칩들을 제조할 수 있다. 제조 팩토리들은 칩들을 제조하기 위해, 1.0㎛, 0.50㎛, 0.35㎛, 0.25㎛, 0.18㎛, 0.13㎛, 0.10㎛, 90nm, 65nm 또는 이보다 작은 최소 라인 폭들을 갖는 표준 CMOS 논리 프로세스를 이용할 수 있다. 통상적으로 사용되는 CMOS 논리 프로세스의 크기는 리소그래피 마스크들을 사용하는 칩 상에 제조될 수 있는 가장작은 최소 리소그래피 치수를 한정하여, 결국 최소 콤포넌트 크기를 결정한다. 일 실시예에 따라, X-레이들 및 극자외선을 포함하는 광이 칩 자체상에 테스트 회로를 위한 회로 설계 및 레이아웃을 전달하기 위해 칩 상에 이러한 리소그래픽 마스크들을 통과할 할 수 있다.
[0099] EDA 툴세트는 그래픽 사용자 인터페이스에 대한 구성 다이얼로그 플러그-인들(configuration dialog plug-ins)을 포함할 수 있다. EDA 툴세트는 SocComp에 대한 RTL 생성기 플러그-인을 포함할 수 있다. EDA 툴세트는 SocComp에 대한 SystemC 생성기 플러그-인을 포함할 수 있다. EDA 툴세트는 RTL 시뮬레이션에 포함될 수 있는 콤포넌트들상에서 유니트-레벨 검증을 수행할 수 있다. EDA 툴세트는 테스트 검증 테스트 벤치 생성기를 포함할 수 있다. EDA 툴세트는 가상 및 하드웨어 디버그 포트 트레이스 파일들에 대한 역어셈블러(disassembler)를 포함할 수 있다. EDA 툴세트는 개방형 코어 프로토콜 사양들과 호환될 수 있다. EDA 툴세트는 트랜잭터 모델들(Transactor models), 번들 프로토콜 체커들(Bundle protocol checkers), 디스플레이 소켓 액티비티에 대한 OCPDis2, 번들의 성능 분석을 위한 OCPPerf2, 및 다른 유사한 프로그램들을 포함할 수 있다.
[00100] 앞서 언급된 바와 같이, EDA 툴 세트는 소프트웨어에서 데이터 및 명령들의 세트로서, 이를 테면 기계-판독가능 매체에 저장되는, 소프트웨어 라이브러리에서 다른 프로그램들에 대해 호출가능한 인스턴스(Instance) 또는 하나의 프로그램에서 소프트웨어 셀 라이브러리를 갖는 실행가능한 프로그램으로 간주되는 EDA 툴 세트로 구현될 수 있다. 기계-판독가능한 저장 매체는 머신(예를 들면, 컴퓨터)에 의해 판독가능한 형태의 정보를 제공(예를 들어, 저장 및/또는 전송)하는 임의의 메커니즘을 포함할 수 있다. 예를 들어, 제한되는 것은 아니지만, 기계-판독가능한 매체는 ROM, RAM, 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 디바이스들, DVD들, EPROM들, EEPROM들, FLASH, 자기 또는 광학 카드들, 또는 전자 명령들을 저장하기에 적합한 임의의 다른 형태의 매체를 포함할 수 있다. 또한, 명령들 및 동작들은 기계-판독가능 매체가 하나 보다 많은 컴퓨터 시스템상에 저장되고 및/또는 하나 보다 많은 컴퓨터 시스템에 의해 실행되는 분산 컴퓨팅 환경들에서 실행될 수 있다. 또한, 컴퓨터 시스템들 사이에서 전달되는 정보는 컴퓨터 시스템들을 접속하는 통신 매체를 통해 추출되거나(pulled) 또는 삽입(pushed)될 수 있다.
[00101] 상기 상세한 설명의 일부들은 컴퓨터 메모리 내의 데이터 비트들 상에서의 동작들을 알고리즘 및 상징적 표현들과 관련하여 제시되었다. 이러한 알고리즘적인 설명(algorithmic descriptions) 및 표현들은 당업자 이외의 사람들에게 이러한 작업 요점을 보다 효율적으로 전달하기 위해, 데이터 처리 기술 분야의 사람들에 의해 이용되는 수단이다. 일반적으로 여기서의 알고리즘은 원하는 결과를 유도하는 동작들의 자급식(self-consistent) 시퀀스인 것으로 간주된다. 동작들은 물리적 양의 물리적 조작(physical manipulation)을 요구하는 것들이다. 통상적으로, 필요한 것은 아니지만, 이러한 양들은 저장, 전달, 조합, 비교 및 다르게는 조작될 수 있는 전기적 또는 자기적 신호들의 형태를 취한다. 때로 편의상, 원칙적으로 일반적인 용도를 위해 이러한 신호들은 비트들, 값들, 엘리먼트들, 심볼들, 문자들, 용어들, 숫자들 또는 이와 유사한 것들로 간주된다는 것이 밝혀졌다.
[00102] 본 발명은 앞서 개시된 특정 실시예들로 제한되지 않는다. 예를 들어, 예시적인 실시예들은 모두 FIFO와 관련되지만, 다른 형태들의 오더링된 큐들을 요청하는 상호접속부 또한 본 발명에 따라 유용해질 수 있다. 따라서, 다른 실시 예들도 청구항들의 범주에 포함된다.

Claims (15)

  1. 상호접속부(interconnect)를 동작시키기 위한 방법으로서,
    공유 저장기 구조에서 어떤 엔트리들이 큐들에 할당되는지를 추적하기 위해, 다수의 오더링된 큐들 및 인덱스(index)를 구현하는 상호접속부의 공유 저장기 구조를 이용하여, 통신 트랜잭션 트래픽을 버퍼링함으로써 집적회로의 다수의 코어들 사이에 있는 다중 쓰레드들로부터 통신 트랜잭션 트래픽을 전송하는 단계;
    제 1 오더링된 큐에 할당되는 쓰레드에 의한 사용을 위해, 상기 오더링된 큐들중 적어도 제 1 오더링된 큐에 대한 최소 수의 버퍼 엔트리들을 보장하는 단계; 및
    상기 보장된 최소 수의 버퍼 엔트리들 이상으로 상기 제 1 오더링된 큐의 크기를 증가시키기 위해, 선착순(first-come, first-served) 원칙에 따라 연관되지 않은(uncommitted) 버퍼 엔트리들의 공유 풀(shared pool)로부터 하나 이상의 버퍼 엔트리들을 차용(borrowing)하는 단계
    를 포함하며, 적어도 상기 공유 풀에 대한 상기 버퍼 엔트리들은 상기 인덱스에 의해 추적되는, 상호접속부를 동작시키기 위한 방법.
  2. 제 1 항에 있어서,
    버퍼 엔트리들의 상기 공유 풀의 각각의 엔트리는 주어진 오더링된 큐에 정적으로 할당되지 않는 메모리 블록인, 상호접속부를 동작시키기 위한 방법.
  3. 제 1 항에 있어서,
    상기 오더링된 큐들은 FIFO들인, 상호접속부를 동작시키기 위한 방법.
  4. 시스템-온-칩 설계 프로세스에 이용되는 전자 설계 자동화(EDA) 툴세트의 명령들 및 데이터를 포함하는 기계-판독가능 매체로서,
    기계에 의해 실행될 때, 상기 기계로 하여금 제 1 항의 동작들을 수행하게 하는 기계-판독가능 매체.
  5. 제 1 항에 있어서,
    상기 상호접속부에서 구현되는 상기 공유 저장기 구조는 콘텐츠 어드레스가능 메모리(CAM) 구조이며, 상기 상호접속부는 적어도 하나 이상의 에이전트 인터페이스들(agent interfaces)을 포함하는, 상호접속부를 동작시키기 위한 방법.
  6. 시스템으로서,
    하나 이상의 데이터 처리 엘리먼트들(elements) 및 하나 이상의 메모리 저장기 엘리먼트들을 포함하는 집적회로;
    상기 데이터 처리 엘리먼트들과 결합되는 상호접속부 ― 상기 상호접속부는 상기 데이터 처리 엘리먼트들과 상기 하나 이상의 메모리 저장기 엘리먼트들 간의 통신 트랜잭션 트래픽을 라우팅하기 위한 것임 ― ;
    상기 하나 이상의 데이터 처리 엘리먼트들과 상기 하나 이상의 메모리 저장기 엘리먼트들 사이에서 상기 통신 트랜잭션 트래픽을 버퍼링하며 상기 상호접속부에 의해 구현되는 공유 저장기 구조
    를 포함하며, 상기 공유 저장기 구조는 상기 공유 저장기 구조의 큐들에 어떤 엔트리들이 할당되는지를 추적하기 위해, 다수의 오더링된 큐들 및 인덱스(index)를 포함하며, 각각의 데이터 처리 엘리먼트는 하나 이상의 쓰레드들을 포함할 수 있고, 하나 이상의 상기 오더링된 큐들은 상기 큐에 할당되는 상기 쓰레드에 의한 사용을 위해, 상기 큐를 구성하는 최소 수의 버퍼 엔트리들로의 액세스가 보장되며,
    선착순 원칙에 따라 하나 이상의 상기 큐들로부터 사용되지 않은 버퍼 엔트리들의 공유 풀(shared pool)부터의 차용에 의해, 상기 큐들중 임의의 큐를 구성하는 상기 최소 수의 버퍼 엔트리들은 상기 공유 저장기 구조를 사용하는 다수의 쓰레드들 중 임의의 쓰레드에 대해 상기 최소 수 이상 증가되며, 적어도 상기 공유 풀에 대한 상기 버퍼 엔트리들은 상기 인덱스에 의해 추적되는, 시스템.
  7. 제 6 항에 있어서,
    상기 상호접속부 상에 라우팅되는 상기 통신 트랜잭션 트래픽은 상기 데이터 처리 엘리먼트들과 상기 하나 이상의 메모리 저장 엘리먼트들 사이에서 라우팅되는 다수의 응답들 및 다수의 요청들을 포함하며,
    상기 상호접속부에서 구현되는 상기 공유 저장기 구조는 콘텐츠 어드레스가 능 메모리(CAM) 구조이며, 상기 CAM 구조는 상기 CAM 구조의 엔트리들을 갖는 상기 오더링된 큐들을 포함하며, 적어도 상기 데이터 처리 엘리먼트들로부터의 2개 이상의 쓰레드들로부터의 상기 요청들, 상기 메모리 저장기 엘리먼트들로부터의 2개 이상의 쓰레드들로부터의 상기 응답들, 또는 이 둘다를 버퍼링하는, 시스템.
  8. 제 7 항에 있어서,
    상기 CAM 구조는 다수의 CAM 엔트리들을 포함하며, 상기 엔트리들 각각은 키(key) 및 데이터 워드(data word)를 가지며,
    상기 키는 적어도 제 1 필드 및 제 2 필드를 포함하며, 상기 제 1 필드는 상기 다수의 오더링된 큐들로부터 제 1 쓰레드와 연관된 고유(unique) 쓰레드 식별자를 통해 제 1 오더링된 큐를 식별하여 그의 엔트리가 현재 어디에 할당되었는지에 대해 식별하며, 상기 제 2 필드는 상기 제 1 오더링된 큐에 대해 큐 오더에서, 얼마나 많은 다른 엔트리들이 상기 엔트리를 선행했는지를 표현하며,
    상기 데이터 워드는 버퍼링된 요청 또는 응답의 일부를 포함하며, 상기 CAM 엔트리들은 상기 다수의 CAM 엔트리들 중 단지(at most) 하나가 임의의 액세스된 키와 매칭되도록 관리되는, 시스템.
  9. 제 7 항에 있어서,
    상기 CAM 구조는 다수의 CAM 엔트리들을 포함하며, 상기 엔트리들 각각은 키 및 데이터 워드를 포함하며, 상기 키는 상기 다수의 오더링된 큐들 중에서 연관된 오더링된 큐 및 연관된 쓰레드를 식별하며, 상기 데이터 워드는 상기 연관된 쓰레드의 버퍼링된 요청 또는 응답의 일부를 포함하며, 제 1 CAM 엔트리가 입력 키와 매칭되게 출력될 때, 상기 제 1 CAM 엔트리는 무효화되어(invalidated) 상기 연관된 오더링된 큐 또는 다른 오더링된 큐에 의한 재사용을 위해 이용되는, 시스템.
  10. 제 8 항에 있어서,
    상기 고유 쓰레드 식별자를 통해 상기 제 1 오더링된 큐를 식별하는 상기 제 1 필드는 CAM 엔트리가 유효한 시간 지속기간 동안 정적이며, 상기 CAM 엔트리는 출력되는 데이터 워드 및 상기 CAM 엔트리와 매칭되는 액세스된 키에 응답하여 무효화되는, 시스템.
  11. 제 8 항에 있어서,
    얼마나 많은 다른 엔트리들이 큐 오더에서 상기 CAM 엔트리를 선행했는지를 표현하는 상기 제 2 필드는 동적이며, 상기 제 1 오더링된 큐에 대해 큐 오더에서, 액세스된 큐가 상기 CAM 엔트리를 선행하는 엔트리와 매칭될 때마다 변경되는, 시스템.
  12. 제 7 항에 있어서,
    쓰레드 번호(number)는 CAM 엔트리가 기록될 때 상기 제 1 필드에 할당되며, 상기 CAM 엔트리가 사용중인 한 변경되지 않는, 시스템.
  13. 시스템-온-칩 설계 프로세스에 이용되는 전자 설계 자동화(EDA) 툴셋의 데이터 및 명령들을 포함하는 기계-판독가능 매체로서,
    기계에 의해 실행될 때, 상기 기계로 하여금 제 6 항 시스템의 표현(representation)을 생성하게 하는, 기계-판독가능 매체.
  14. 제 6 항에 있어서,
    상기 공유 저장기는 비동기식 멀티-쓰레드 오더링된 큐(MTOQ)를 포함하며, 상기 MTOQ는 단일-쓰레드 비동기식 오더링된 큐의 조합으로서 구현되며, 상기 단일-쓰레드 비동기식 오더링된 큐의 판독 포트는 상기 다수의 다중 쓰레드 버퍼들이 상기 CAM를 이용하여 구현되는 멀티-쓰레드 동기식 오더링된 큐의 기록 포트에 공급되는, 시스템.
  15. 제 7 항에 있어서,
    상기 CAM 구조의 상기 최소 수의 버퍼 엔트리들은 각각의 쓰레드에 대해 상기 CAM 구조에 할당되는 고정된 수의 버퍼 엔트리들이며, 사용되지 않은 버퍼 엔트리들의 상기 공유 풀은 상기 쓰레드에 대해 할당된(allotted) 고정된 수의 버퍼 엔트리들이 초과된 후, 상기 CAM에 할당된 임의의 쓰레드에 의해 선착순 원칙으로 이용되는, 시스템.
KR1020097026779A 2007-06-01 2008-05-30 상호접속부에서 멀티-쓰레드 오더링된 큐들에 대한 공유 저장기 KR101467932B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/757,248 2007-06-01
US11/757,248 US7814243B2 (en) 2007-06-01 2007-06-01 Shared storage for multi-threaded ordered queues in an interconnect

Publications (2)

Publication Number Publication Date
KR20100017897A true KR20100017897A (ko) 2010-02-16
KR101467932B1 KR101467932B1 (ko) 2014-12-02

Family

ID=40075560

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097026779A KR101467932B1 (ko) 2007-06-01 2008-05-30 상호접속부에서 멀티-쓰레드 오더링된 큐들에 대한 공유 저장기

Country Status (4)

Country Link
US (2) US7814243B2 (ko)
EP (1) EP2156305A4 (ko)
KR (1) KR101467932B1 (ko)
WO (1) WO2008148132A1 (ko)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7814243B2 (en) 2007-06-01 2010-10-12 Sonics, Inc. Shared storage for multi-threaded ordered queues in an interconnect
TWI381315B (zh) * 2008-10-24 2013-01-01 Nat Univ Chung Cheng Synchronization elements for multi-core embedded systems
US8190804B1 (en) * 2009-03-12 2012-05-29 Sonics, Inc. Various methods and apparatus for a memory scheduler with an arbiter
US8990633B2 (en) * 2009-04-21 2015-03-24 Freescale Semiconductor, Inc. Tracing support for interconnect fabric
GB2471067B (en) 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
US9098383B1 (en) * 2009-09-23 2015-08-04 Nvidia Corporation Consolidated crossbar that supports a multitude of traffic types
US20110213949A1 (en) * 2010-03-01 2011-09-01 Sonics, Inc. Methods and apparatus for optimizing concurrency in multiple core systems
US8972995B2 (en) * 2010-08-06 2015-03-03 Sonics, Inc. Apparatus and methods to concurrently perform per-thread as well as per-tag memory access scheduling within a thread and across two or more threads
US8601288B2 (en) 2010-08-31 2013-12-03 Sonics, Inc. Intelligent power controller
US8438306B2 (en) 2010-11-02 2013-05-07 Sonics, Inc. Apparatus and methods for on layer concurrency in an integrated circuit
US9405700B2 (en) 2010-11-04 2016-08-02 Sonics, Inc. Methods and apparatus for virtualization in an integrated circuit
US8468547B2 (en) * 2010-11-23 2013-06-18 Advanced Micro Devices, Inc. Method and system for synchronizing thread wavefront data and events
CN102685077B (zh) * 2011-03-16 2015-04-29 腾讯科技(深圳)有限公司 一种处理网络数据包的方法和装置
JP5686046B2 (ja) * 2011-03-31 2015-03-18 富士通株式会社 アプリ提供システム、アプリ提供方法及びアプリ提供プログラム
US8868941B2 (en) 2011-09-19 2014-10-21 Sonics, Inc. Apparatus and methods for an interconnect power manager
US8990833B2 (en) 2011-12-20 2015-03-24 International Business Machines Corporation Indirect inter-thread communication using a shared pool of inboxes
US8854851B2 (en) * 2012-09-04 2014-10-07 Advanced Micro Devices, Inc. Techniques for suppressing match indications at a content addressable memory
US20150301829A1 (en) * 2014-04-18 2015-10-22 Jeffrey W. Scott Systems and methods for managing branch target buffers in a multi-threaded data processing system
US9846658B2 (en) * 2014-04-21 2017-12-19 Cisco Technology, Inc. Dynamic temporary use of packet memory as resource memory
US9547521B2 (en) * 2014-09-25 2017-01-17 Oracle International Corporation System and method for supporting dynamic thread pool sizing in a distributed data grid
US9824413B2 (en) * 2014-11-15 2017-11-21 Intel Corporation Sort-free threading model for a multi-threaded graphics pipeline
US10303628B2 (en) * 2014-12-19 2019-05-28 Sonics, Inc. Reordering responses in a high performance on-chip network
US9678812B2 (en) 2014-12-22 2017-06-13 International Business Machines Corporation Addressing for inter-thread push communication
US9766890B2 (en) 2014-12-23 2017-09-19 International Business Machines Corporation Non-serialized push instruction for pushing a message payload from a sending thread to a receiving thread
US9575825B2 (en) 2014-12-23 2017-02-21 International Business Machines Corporation Push instruction for pushing a message payload from a sending thread to a receiving thread
US10152112B2 (en) 2015-06-10 2018-12-11 Sonics, Inc. Power manager with a power switch arbitrator
US20160378497A1 (en) * 2015-06-26 2016-12-29 Roger Gramunt Systems, Methods, and Apparatuses for Thread Selection and Reservation Station Binding
US10536441B2 (en) * 2016-08-23 2020-01-14 Texas Instruments Incorporated Thread ownership of keys for hardware-accelerated cryptography
US10877509B2 (en) * 2016-12-12 2020-12-29 Intel Corporation Communicating signals between divided and undivided clock domains
CN110447019B (zh) * 2017-03-23 2023-11-17 瑞典爱立信有限公司 存储器分配管理器及由其执行的用于管理存储器分配的方法
US10628166B2 (en) 2017-09-20 2020-04-21 International Business Machines Corporation Allocating and deallocating reorder queue entries for an out-of-order processor
TWI736088B (zh) * 2019-12-30 2021-08-11 新唐科技股份有限公司 電子裝置及其測試模式啟用方法
CN113312388A (zh) * 2021-05-28 2021-08-27 中国船舶重工集团公司第七0七研究所 一种多线程且安全的数据库存储框架的构建方法
US11922026B2 (en) 2022-02-16 2024-03-05 T-Mobile Usa, Inc. Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088788A (en) * 1996-12-27 2000-07-11 International Business Machines Corporation Background completion of instruction and associated fetch request in a multithread processor
US6092115A (en) * 1997-02-07 2000-07-18 Lucent Technologies Inc. Method for supporting per-connection queuing for feedback-controlled traffic
US5948089A (en) * 1997-09-05 1999-09-07 Sonics, Inc. Fully-pipelined fixed-latency communications system with a real time dynamic bandwidth allocation
JP3224782B2 (ja) * 1998-08-03 2001-11-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 処理分担動的変更方法及びコンピュータ
US6182183B1 (en) * 1998-11-13 2001-01-30 Sonics, Inc. Communications system and method with multilevel connection identification
US5999435A (en) * 1999-01-15 1999-12-07 Fast-Chip, Inc. Content addressable memory device
AU6776200A (en) * 1999-08-17 2001-03-13 Conexant Systems, Inc. Integrated circuit with a core processor and a co-processor to provide traffic stream processing
US6606317B1 (en) * 1999-09-09 2003-08-12 Harris Corporation Dual key controlled content addressable memory for accessing packet switch data buffer for multicasting data packets
US6330225B1 (en) * 2000-05-26 2001-12-11 Sonics, Inc. Communication system and method for different quality of service guarantees for different data flows
US6331961B1 (en) * 2000-06-09 2001-12-18 Silicon Access Networks, Inc. DRAM based refresh-free ternary CAM
US7325221B1 (en) * 2000-08-08 2008-01-29 Sonics, Incorporated Logic system with configurable interface
US6804815B1 (en) * 2000-09-18 2004-10-12 Cisco Technology, Inc. Sequence control mechanism for enabling out of order context processing
US7165094B2 (en) * 2001-03-09 2007-01-16 Sonics, Inc. Communications system and method with non-blocking shared interface
US6785753B2 (en) * 2001-06-01 2004-08-31 Sonics, Inc. Method and apparatus for response modes in pipelined environment
US6988186B2 (en) * 2001-06-28 2006-01-17 International Business Machines Corporation Shared resource queue for simultaneous multithreading processing wherein entries allocated to different threads are capable of being interspersed among each other and a head pointer for one thread is capable of wrapping around its own tail in order to access a free entry
US6578117B2 (en) * 2001-10-12 2003-06-10 Sonics, Inc. Method and apparatus for scheduling requests using ordered stages of scheduling criteria
US6804738B2 (en) * 2001-10-12 2004-10-12 Sonics, Inc. Method and apparatus for scheduling a resource to meet quality-of-service restrictions
US6961834B2 (en) * 2001-10-12 2005-11-01 Sonics, Inc. Method and apparatus for scheduling of requests to dynamic random access memory device
US6597629B1 (en) * 2001-11-30 2003-07-22 Virage Locic Corp. Built-in precision shutdown apparatus for effectuating self-referenced access timing scheme
US7162546B2 (en) * 2001-12-27 2007-01-09 Intel Corporation Reordering unrelated transactions from an ordered interface
US6779089B2 (en) * 2002-01-09 2004-08-17 Intel Corporation Locked content addressable memory for efficient access
US6779084B2 (en) * 2002-01-23 2004-08-17 Intel Corporation Enqueue operations for multi-buffer packets
US6683474B2 (en) * 2002-01-29 2004-01-27 Sonic, Inc. Method and apparatus for communication using a distributed multiplexed bus
US7003628B1 (en) * 2002-12-27 2006-02-21 Unisys Corporation Buffered transfer of data blocks between memory and processors independent of the order of allocation of locations in the buffer
US7111001B2 (en) * 2003-01-27 2006-09-19 Seiko Epson Corporation Event driven transaction state management with single cache for persistent framework
US7149829B2 (en) * 2003-04-18 2006-12-12 Sonics, Inc. Various methods and apparatuses for arbitration among blocks of functionality
US7281083B2 (en) * 2004-06-30 2007-10-09 Intel Corporation Network processor with content addressable memory (CAM) mask
US20060195663A1 (en) * 2005-02-25 2006-08-31 International Business Machines Corporation Virtualized I/O adapter for a multi-processor data processing system
US7581225B2 (en) * 2005-04-29 2009-08-25 Microsoft Corporation Multithreading with concurrency domains
US20070124728A1 (en) * 2005-11-28 2007-05-31 Mark Rosenbluth Passing work between threads
US7814243B2 (en) 2007-06-01 2010-10-12 Sonics, Inc. Shared storage for multi-threaded ordered queues in an interconnect

Also Published As

Publication number Publication date
EP2156305A4 (en) 2011-08-17
WO2008148132A1 (en) 2008-12-04
US8166214B2 (en) 2012-04-24
EP2156305A1 (en) 2010-02-24
KR101467932B1 (ko) 2014-12-02
US20080301708A1 (en) 2008-12-04
US20100115196A1 (en) 2010-05-06
US7814243B2 (en) 2010-10-12

Similar Documents

Publication Publication Date Title
KR101467932B1 (ko) 상호접속부에서 멀티-쓰레드 오더링된 큐들에 대한 공유 저장기
US10664421B1 (en) Reordering responses in a high performance on-chip network
US8972995B2 (en) Apparatus and methods to concurrently perform per-thread as well as per-tag memory access scheduling within a thread and across two or more threads
US10062422B2 (en) Various methods and apparatus for configurable mapping of address regions onto one or more aggregate targets
US8438306B2 (en) Apparatus and methods for on layer concurrency in an integrated circuit
US8484397B1 (en) Various methods and apparatus for a memory scheduler with an arbiter
KR102209875B1 (ko) 최소 스토리지를 활용한 플렉시블 링크 폭들을 갖는 라우터에서 크레딧 흐름 제어 방식
US20110213949A1 (en) Methods and apparatus for optimizing concurrency in multiple core systems
US7849441B2 (en) Method for specifying stateful, transaction-oriented systems for flexible mapping to structurally configurable, in-memory processing semiconductor device
Sano et al. ESSPER: Elastic and scalable FPGA-cluster system for high-performance reconfigurable computing with supercomputer Fugaku
US11496418B1 (en) Packet-based and time-multiplexed network-on-chip
Zitouni et al. Communication architecture synthesis for multi-bus SoC
Medardoni et al. Capturing the interaction of the communication, memory and I/O subsystems in memory-centric industrial MPSoC platforms
US11373024B1 (en) Circuit simulation based on a high-level language circuit specification
Kogel et al. Virtual architecture mapping: a SystemC based methodology for architectural exploration of System-on-Chips
Schuermans et al. Network on Chip Experiments

Legal Events

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

Payment date: 20171027

Year of fee payment: 4