KR20200088499A - 포인터 오프셋이 있는 비동기식 버퍼 - Google Patents

포인터 오프셋이 있는 비동기식 버퍼 Download PDF

Info

Publication number
KR20200088499A
KR20200088499A KR1020207019940A KR20207019940A KR20200088499A KR 20200088499 A KR20200088499 A KR 20200088499A KR 1020207019940 A KR1020207019940 A KR 1020207019940A KR 20207019940 A KR20207019940 A KR 20207019940A KR 20200088499 A KR20200088499 A KR 20200088499A
Authority
KR
South Korea
Prior art keywords
offset value
read
write
clock
pointer
Prior art date
Application number
KR1020207019940A
Other languages
English (en)
Other versions
KR102427775B1 (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 KR20200088499A publication Critical patent/KR20200088499A/ko
Application granted granted Critical
Publication of KR102427775B1 publication Critical patent/KR102427775B1/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/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • G06F1/08Clock generators with changeable or programmable clock frequency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
    • G06F5/14Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
    • 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
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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
    • G06F13/405Coupling between buses using bus bridges where the bridge performs a synchronising function
    • G06F13/4059Coupling between buses using bus bridges where the bridge performs a synchronising function where the synchronisation uses buffers, e.g. for speed matching between buses
    • 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/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4234Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
    • G06F13/4239Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus with asynchronous protocol
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/12Indexing scheme relating to groups G06F5/12 - G06F5/14
    • G06F2205/126Monitoring of intermediate fill level, i.e. with additional means for monitoring the fill level, e.g. half full flag, almost empty flag

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Information Transfer Systems (AREA)
  • Synchronisation In Digital Transmission Systems (AREA)
  • Communication Control (AREA)

Abstract

프로세서(100)는 클록 도메인들(102, 104) 사이에서 전송되는 데이터를 위한 선입선출 버퍼(FIFO)(110)에 판독 및 기록 포인터들(125, 115)에 대한 오프셋 값(155, 150)을 적용한다. 포인터 오프셋은 클록 도메인 사이의 주파수 비율에 기초하고, 레이턴시를 줄이면서 데이터가 엔트리에 기록될 때까지 데이터가 FIFO의 엔트리에서 수신 클록 도메인에 의해 판독되지 않도록 보장하여 데이터 전송 에러를 줄인다. 프로세서는 클록 도메인들 중 하나 또는 둘 모두에서 클록 주파수의 변화에 응답하여 포인터 오프셋 값을 재설정하여, 프로세서가 클록 주파수 변화에 응답하여 데이터를 계속 정확하게 전송할 수 있게 한다.

Description

포인터 오프셋이 있는 비동기식 버퍼
프로세서는 전형적으로 하나 이상의 클록 신호를 사용하여 프로세서의 모듈에서의 로직 동작을 동기화함으로써 셋업 에러, 경쟁 조건(race condition) 등과 같은 에러를 방지한다. 전형적인 프로세서는 프로세서의 상이한 부분에 대해 상이한 클록 신호를 사용하며, 각각의 프로세서 부분은 클록 도메인으로 지칭된다. 상이한 클록 도메인에 대한 클록 신호는 상대적으로 서로 독립적이어서, 상이한 클록 도메인의 로직 동작이 다른 클록 도메인과 독립적으로 동기화될 수 있게 한다. 예를 들어, 프로세서는 상이한 클록 도메인을 상이한 주파수의 클록 신호와 동기화하여 처리 효율을 향상시킬 수 있다. 또한, 클록 신호의 독립성은 프로세서에서의 단순화된 클록 관리 및 신호 라우팅을 지원한다. 그러나, 많은 경우에, 상이한 클록 도메인의 모듈 간에 데이터가 통신되어야 하므로, 이러한 통신은 데이터에서 준안정(meta-stability) 에러를 야기할 수 있다. 이러한 에러는 데이터 전송을 수행하기 위해 클록 도메인 사이에 플립 플롭 세트(동기화기(synchronizer)라고 함)와 같은 준안정 회로를 포함시킴으로써 개선될 수 있다. 그러나, 이러한 준안정 회로는 레이턴시(latency)를 추가하여 처리 효율에 부정적인 영향을 줄 수 있다. 클록 도메인을 통해 데이터를 전송하기 위해 선입 선출 버퍼(FIFO)를 사용하여 에러를 줄일 수도 있지만, 비동기식 FIFO는 낮은 대역폭과 높은 레이턴시로 어려움을 겪는다.
본 개시는 더 잘 이해될 수 있고, 그것의 수많은 특징 및 장점은 첨부 도면을 참조함으로써 당업자에게 명백해진다. 다른 도면에서 동일한 참조 부호의 사용은 유사하거나 동일한 아이템을 나타낸다.
도 1은 일부 실시예들에 따라 클록 도메인들 사이의 데이터 전송을 지원하는 FIFO에 대한 포인터를 판독 및 기록하기 위해 오프셋 값을 적용하는 프로세서의 블록도이다.
도 2는 일부 실시예에 따라 FIFO에서 동일한 클록 주파수를 갖는 클록 도메인 사이의 데이터 전송을 위해 기록 또는 판독 포인터에 대해 오프셋을 적용하지 않는 도 1의 FIFO 제어기를 예시하는 도면이다.
도 3은 일부 실시예에 따라 FIFO에서 동일한 클록 주파수를 갖는 클록 도메인 사이의 데이터 전송을 위해 기록 오프셋 및 판독 오프셋을 적용하는 도 1의 FIFO 제어기를 나타내는 도면이다.
도 4는 일부 실시예에 따라 기록 클록과 판독 클록 도메인 사이의 데이터 전송을 위해 기록 또는 판독 포인터에 대해 오프셋을 적용하지 않은 도 1의 FIFO 제어기를 나타내는 도면이고, 여기서, 기록 클록은 FIFO에서 판독 클록보다 50% 더 높은 주파수를 갖는다.
도 5는 일부 실시예에 따라 기록 클록과 판독 클록 도메인 사이의 데이터 전송을 위해 기록 오프셋 및 판독 오프셋을 적용한 도 1의 FIFO 제어기를 나타내는 도면이고, 여기서, 기록 클록은 FIFO에서 판독 클록보다 50% 더 높은 주파수를 갖는다.
도 6은 일부 실시예에 따른 도 1의 프로세서의 FIFO 제어기의 블록도이다.
도 7은 일부 실시예에 따라 클록 도메인 중 하나 또는 둘 모두에 대한 클록 신호의 주파수 변화에 응답하여 FIFO에서 클록 도메인 사이에서 데이터를 전송하기 위한 기록 포인터 오프셋 및 판독 포인터 오프셋을 설정하는 방법의 흐름도이다.
도 1 내지 도 7은 클록 도메인들 간의 주파수 비율에 기초하여 프로세서의 클록 도메인들 간에 전송되는 데이터에 대한 포인터들을 FIFO에 판독 및 기록하기 위해 오프셋 값들을 적용하는 기술들을 도시하며, 판독 및 기록 포인터와 관련된 준안정 회로에 의해 제어되는 것보다 빠른 속도로 데이터가 FIFO에 기록 또는 그로부터 판독되는 것을 허용한다. 프로세서는 각각의 클록 도메인에서 포인터 오프셋을 설정하고 적용하는 하나 이상의 제어기를 사용하여 레이턴시를 줄이면서 데이터가 엔트리에 기록될 때까지 데이터가 FIFO의 엔트리에서 수신 클록 도메인에 의해 판독되지 않도록 보장하여 데이터 전송 에러를 줄인다. 또한, 제어기는 클록 도메인 중 하나 또는 둘 모두에서 클록 주파수의 변화에 응답하여 포인터 오프셋 값을 리셋한다. 하나 이상의 제어기를 사용하여 포인터 오프셋 값을 설정하고 적용함으로써, 프로세서는 클록 주파수 변경에 응답하여 데이터를 계속 정확하게 전송하는 동시에 레이턴시를 줄이고 대역폭을 최대화한다. 프로세서는 클록 도메인 간의 정확한 데이터 전송을 지원하면서 처리 효율을 향상시킨다.
예시하기 위해, 프로세서는 2 개의 상이한 클록 도메인 사이에서 전송되는 데이터를 저장하기 위해 다수의 엔트리를 갖는 선입 선출 큐(queue)(FIFO)를 포함한다. 각각의 클록 도메인은 FIFO에 액세스하기 위한 포인터 세트를 관리하는 제어기를 포함한다. 통상적으로, 판독 및 기록 포인터는 준안정 회로를 통해 클록 도메인에 걸쳐 전송되어 엔트리의 판독 또는 기록이 완료될 때까지 FIFO 엔트리에 데이터가 기록되거나 그로부터 판독되지 않도록 한다. 그러나, 준안정 회로의 타이밍 및 구성은 상이한 클록 도메인의 클록 신호 간의 가정된 "최악의 경우(worst-case)"관계에 기초한다. 더욱이, 상이한 클록 신호의 주파수는 프로세서의 동작 요건 변화에 기초하여 시간이 지남에 따라 변하기 때문에, 가정된 최악의 관계는 많은 경우 너무 보수적이어서 처리 효율에 부정적인 영향을 미친다. 본 출원에 기술된 기술을 사용하여, FIFO 제어기는 상이한 클록 도메인의 클록 신호의 주파수에 기초하여 하나 이상의 판독 및 기록 포인터에 0이 아닌 오프셋 값을 적용함으로써, FIFO가 더 빠르게 판독되거나 기록될 수 있게 한다. 그렇게 함으로써, 제어기는 데이터가 판독되기 전에 FIFO에 기록된 데이터에 대해 더 낮은 레이턴시가 수립되도록 한다. 예를 들어, 클록 도메인의 주파수가 동일한 일부 실시예에 대해, 제어기는 FIFO의 레이턴시를 몇 클록 사이클 만큼 감소시키는 양의(positive) 기록 포인터 오프셋 값 및 양의 판독 포인터 오프셋 값을 설정한다. 일부 실시예들에서, 기록 클록의 주파수는 판독 클록의 주파수보다 높고, 제어기는 기록 포인터에 대한 음의(negative) 오프셋 값을 설정하여 FIFO에 있는 시간 엔트리를 줄이고, 판독 포인터에 대한 양의 오프셋 값을 설정하여 포인터가 동기화를 대기할 때 판독 측이 스톨링(stalling)하는 것을 방지하여, 레이턴시를 줄이고 대역폭을 증가시킨다. FIFO의 두 클록 도메인은 알려진 주파수(또는 주기) 비율에 기초하여 전송할 데이터가 없는 경우에도 판독 및 기록 포인터를 일정한 속도로 이동시킨다. 전송 속도의 불변성(constancy)은 달리 주파수를 알 수 없거나 마진 한계를 넘어 변동하는 경우 안전하지 않을 적절한 오프셋을 적용할 수 있다. 오프셋 값을 결정하기 위해, 제어기는 FIFO 깊이, 동기화기 깊이, FIFO에 기록하기 위한 기록 모듈 및 그로부터 판독하기 위한 판독 모듈의 준비 상태를 나타내는 신호로 인한 지연(준비 및 헤드 업(heads up) 깊이) 및 요구된 마진의 면에서 클록 도메인의 주파수를 비교한다. 본 출원에서 추가로 설명되는 바와 같이, 기록 및 판독 포인터 위치를 오프셋시키기 위해 제어기를 사용함으로써, 프로세서는 클록 도메인을 가로 지르는 데이터 흐름의 레이턴시를 감소시킨다.
도 1은 일부 실시예에 따라 클록 도메인들 간의 주파수 비율에 기초하여 프로세서의 클록 도메인들 사이에서 전송되는 데이터에 대한 포인터들을 FIFO에 판독 및 기록하기 위해 오프셋 값들을 적용하고, 클록 도메인 중 적어도 하나에 대한 클록 신호에 주파수 변화에 응답하여 오프셋 값들을 리셋하는 프로세서(100)를 도시한다. 프로세서(100)는 다양한 컴퓨팅 인에이블 전자 디바이스 중 임의의 것 예컨대, 서버, 데스크탑 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 컴퓨팅 인에이블 휴대용 셀룰러 폰(예를 들어, "스마트 폰"), 컴퓨팅 인에이블 시계 또는 다른 웨어러블 아이템, PDA(personal digital assistant), 게임 콘솔 등에 의해 구현된다. 도시된 예에서, 프로세서(100)는 기록 클록 도메인(102) 및 판독 클록 도메인(104)으로 지정된 2 개의 클록 도메인을 포함한다. 기록 클록 도메인(102)은 프로세서 코어(미도시)의 동작과 관련된 기록 모듈(140)을 포함한다. 판독 클록 도메인(104)은 프로세서 코어(미도시)의 동작과 관련된 판독 모듈(145)을 포함한다. 일부 실시예들에서, 프로세서(100)는 상이한 프로세서 코어들 및 대응하는 캐시들을 지원하기 위해 기록 클록 도메인(102) 및 판독 클록 도메인(104)과 유사한 추가 클록 도메인들(미도시)을 포함하며, 각각의 클록 도메인은 그 자체의 캐시를 포함하는 자체의 메모리 계층을 갖는다.
처리 효율을 유지하기 위해, 프로세서(100)는 상이한 클록 신호를 기록 클록 도메인(102) 및 판독 클록 도메인(104)에 제공하여 개별 동작을 동기화시킨다. 도시된 예에서, 기록 클록 도메인(102)에 제공된 클록 신호는 "기록 클록(WRITE CLOCK)"으로 지정되고, 판독 클록 도메인(104)에 제공된 클록 신호는 "판독 클록(READ CLOCK)"으로 지정된다. 본 출원에서 추가로 설명되는 바와 같이, 기록 클록 및 판독 클록 신호는 비동기식이므로, 상이한 주파수 및 위상을 가질 수 있다.
특히, 기록 클록 및 판독 클록 신호를 생성하기 위해, 프로세서(100)는 클록 제너레이터(108)를 사용한다. 클록 제너레이터(108)는 기준 결정과 같은 클록 소스(미도시)에 의해 제공되는 안정한 발진 신호에 락킹(lock)되는 위상인 타이밍 신호(미도시)에 기초하여 기록 클록 및 판독 클록 신호를 생성하도록 구성된 모듈이다. 일부 실시예들에서, 클록 제너레이터(108)는 각각의 클록 신호에 대한 클록 주파수를 독립적으로 수립하는 제어 시그널링에 기초하여 다수의 클록 신호를 선택적으로 조합함으로써 기록 클록 및 판독 클록 신호를 생성한다. 도시된 예에서, 제어 시그널링은 제어기(106)에 의해 제공된다.
클록 제너레이터(108)는 제어기(106)로부터의 제어 시그널링에 기초하여 각각의 기록 클록 및 판독 클록 신호에 대한 주파수를 식별한다. 클록 제너레이터(108)는 개별 결정된 주파수에서 기록 클록 및 판독 클록 신호를 생성한다. 일부 실시예에서, 클록 제너레이터(108)는 개별 주파수에서 각각의 클록 신호를 생성하기 위해 타이밍 신호의 위상 시프트된(shifted) 버전을 독립적으로 조합하여 각각의 기록 클록 및 판독 클록 신호를 생성한다. 클록 제너레이터(108)는 각각의 클록 신호들, 기록 클록 및 판독 클록에 대한 주파수를 서로 독립적으로 설정 및 변경하여, 기록 클록 및 판독 클록 신호들이 비동기 식이다.
클록 신호, 기록 클록 및 판독 클록의 비동기성으로 인해, 기록 클록 도메인(102) 및 판독 클록 도메인(104)은 대응하는 클록 신호 중 하나에만 기초하여, 데이터를 동기식으로 신뢰할 수 있게 통신할 수 없다. 따라서, 기록 클록 도메인(102)과 판독 클록 도메인(104) 사이의 데이터 통신을 가능하게 하기 위해, 프로세서(100)는 복수의 엔트리를 갖는 FIFO(110)를 포함하고, 각각의 엔트리는 기록 클록 도메인(102) 및 판독 클록 도메인(104) 둘 모두에 의해 액세스되는 별개의 자체 어드레스를 갖는(addressable) 저장 위치이다. 예를 들어, 일부 실시예에서 FIFO(110)는 8 개의 엔트리(즉, 8의 깊이(depth)를 가짐)를 포함한다. 본 출원에서 사용되는, FIFO(110)의 깊이는 FIFO(110)의 엔트리 수를 지칭한다. 따라서, 일부 실시예에서, FIFO(110)는 4, 6, 8, 10, 12, 14 또는 16의 깊이를 갖는다. 설명의 편의를 위해, FIFO(110)는 본 출원에 설명된 기술에 따라 기록 클록 도메인(102)으로부터 판독 클록 도메인(104)으로 데이터를 전송하기 위해 사용되는 것으로 가정된다.
FIFO(110)에 액세스하기 위해, 기록 클록 도메인(102)은 기록 모듈(140)을 포함하고 판독 클록 도메인(104)은 판독 모듈(145)을 포함한다. 각각의 판독/기록 모듈(140 및 145)은 FIFO(110)에 액세스하기 위한 포인터 세트를 독립적으로 관리한다. 특히, 기록 모듈(140)은 기록될 FIFO(110)의 다음 엔트리를 표시하기 위해 기록 포인터(115)를 사용한다. 판독 클록 도메인(104)으로 데이터를 전송하기 위해 FIFO(110)의 가용 슬롯을 검출하는 것에 응답하여, 기록 모듈(140)은 하나의 클록 사이클 동안 준비 신호(165)를 어써트(assert)하여, 오픈 FIFO 엔트리는 기록 클록 도메인(102)의 구성된 수의 클록에서 이용 가능할 것이다는 것을 프로세서(100)의 컴포넌트와 통신하는 외부 로직에 표시한다. 기록 클록 도메인(102)에서 구성된 수의 클록 후에, 기록 모듈(140)은 FIFO(110)의 엔트리에 데이터를 기록한 다음 FIFO(110)의 다음 엔트리를 가리키도록 기록 포인터(115)를 조정한다. 기록 모듈(140)은 필요한 케이던스(cadence)를 유지하기 위해 유효한 데이터가 있는 지의 여부를 FIFO(110)에 기록을 수행한다. 기록된 엔트리가 FIFO(110)의 마지막 엔트리인 경우, 기록 모듈(140)은 FIFO(110)의 제 1 엔트리를 가리키도록 기록 포인터(115)를 조정한다. 따라서, FIFO(110)가 8 개의 엔트리를 갖는다고 가정하면, 기록 포인터(115)는 먼저 엔트리 0을 가리킨 다음 엔트리 1, 그런 다음 엔트리 2, 그런 다음 엔트리 3, 그런 다음 엔트리 4, 그런 다음 엔트리 5, 그런 다음 엔트리 6, 그런 다음 엔트리 7을 가리키고 그런 다음 엔트리 0로 리턴한다.
판독 모듈(145)은 판독될 FIFO(110)의 다음 엔트리를 표시하기 위해 판독 포인터(125)를 사용한다. 판독 모듈(145)이 FIFO(110)로부터 엔트리가 판독될 수 있음을 검출한 것에 응답하여, FIFO(110)로부터의 판독이 구성된 수의 판독 클록 도메인(104) 사이클에서 일어날 것이라는 헤드 업 신호(160)를 외부 로직에 1 클록 사이클 동안 어써트한다. 구성된 수의 판독 클록 도메인(104) 사이클 후, 판독 모듈(145)은 판독 포인터(125)에 의해 표시된 엔트리를 판독한 다음, FIFO(110)의 다음 엔트리를 가리키도록 판독 포인터(125)를 조정한다. 판독 모듈(145)은 적절한 케이던스를 유지하기 위해 전송할 유효한 데이터가 있는지 여부의 전송을 수행한다. 전술한 기록 포인터(115)와 같이, 판독 엔트리가 FIFO(110)의 마지막 엔트리이면, 판독 모듈(145)은 FIFO(110)의 제 1 엔트리를 가리키도록 판독 포인터(125)를 조정한다.
리셋 동안, 기록 포인터(115)와 판독 포인터(125) 둘 모두는 FIFO(110)의 초기 엔트리에 대응하는 초기 값으로 설정된다. FIFO(110)는 기록 포인터(115)와 판독 포인터(125)가 동일할 때 비어 있다. FIFO(110)는 기록 포인터(115)와 판독 포인터(125)의 최상위 비트(MSB)가 다를 때 가득 차(full) 있지만, 나머지 비트는 동일하다. 일부 실시예들에서, 기록 포인터(115) 및 판독 포인터(125)는 그레이 코드(Gray code)를 사용하여 인코딩된다. 임의의 인접한 두 개의 그레이 코드 워드 사이의 코드 거리는 1이다; 따라서, 하나의 비트만 하나의 그레이 카운트로부터 다음 그레이 카운트로 변경된다. 그레이 코드를 사용하여 기록 포인터(115) 및 판독 포인터(125)를 인코딩함으로써, 클록 에지에서 다수의 변화하는 비트를 동기화할 필요가 없다.
기록 모듈(140) 및 판독 모듈(145) 각각은 그들의 클록 도메인에 대응하는 클록 신호(즉, 각각 클록 신호, 기록 클록 및 판독 클록)에 의해 개별적으로 동기화된다. 판독 포인터(125)를 기록 클록 도메인(102)과 동기화하고, 준안정 에러를 방지하기 위해, FIFO(110)의 엔트리들에 대한 기록 포인터(115)의 위치는 기록 포인터 sync(135)를 통해 판독 포인터(125)로 송신된다. 유사하게, 기록 포인터(115)를 판독 클록 도메인과 동기화하고 준안정 에러를 방지하기 위해, FIFO(110)의 엔트리들에 대한 판독 포인터(125)의 위치는 판독 포인터 sync(130)를 통해 기록 포인터(115)로 송신된다. 기록 포인터 동기(135) 및 판독 포인터 동기(130) 각각은 다수의 플립 플롭(미도시)(플립 플롭의 수는 "동기 깊이(sync depth)"라고 함)을 포함하고, FIFO(110)의 엔트리에 기록된 또는 엔트리로부터 판독된 데이터에 대한 지연을 유지한다.
일부 실시예에서, 기록 모듈(140)은 기록 모듈(140)이 FIFO(110)에 데이터를 출력할 준비가 되어 있음을 나타내는 준비 신호(165)를 어써트한다. 일부 실시예에서, 기록 모듈(140)은 기록 모듈(140)이 데이터를 FIFO(110)에 출력하기 전에 미리 결정된 수의 기록 클록 사이클을 준비 신호(165)에 어써트한다. 일부 실시예에서, 미리 결정된 수의 기록 클록 사이클은 프로그램 가능하다. 일부 실시예에서, 판독 모듈(145)은 판독 모듈(145)이 FIFO(110)로부터 데이터를 판독할 준비가 되기 전에 미리 결정된 수의 판독 클록 사이클을 헤드 업 신호(160)에 어써트한다. 일부 실시예에서, 미리 결정된 수의 판독 클록 사이클은 프로그램 가능하다. 헤드 업 신호(160) 및 준비 신호(165)는 FIFO(110)의 각각의 측면상의 인터페이스 로직이 데이터를 효율적으로 전달 및 수신하고, 레이턴시를 감소시키고, 중요한 타이밍 경로를 용이하게 하는 것을 허용한다. 그러나, 판독 포인터 sync(130), 기록 포인터 sync(135), 헤드 업 신호(160) 및 준비 신호(165)로부터의 누적된 지연은 FIFO(110)에서 증가된 레이턴시로 귀결된다. 일부 실시예에서, 기록 모듈(140)은 준비 신호(165) 및 헤드 업 신호(160)를 지연시키기 위한 상태 엘리먼트(미도시)의 파이프 라인을 포함한다.
일부 실시예에서, 기록 모듈(140)은 커밋(commit) 기록 포인터(170)를 사용하고, 판독 모듈(145)은 추가 기록 및 판독 포인터 상태를 개별적으로 추적하기 위해 커밋 판독 포인터(180)를 사용하고, 이는 외부 로직에 아웃스탠딩(outstanding)이지만 아직 FIFO(110)에 커밋되지 않은 준비 신호(165) 및 헤드 업 신호(160) 어써트를 갖는 사이클의 수를 반영한다(준비 신호(165) 지연 및 헤드 업 신호(160) 지연 개별적으로 지칭됨). 커밋 기록 포인터(170)의 독립적으로 구성 가능한 준비 신호(165) 지연 및 커밋 판독 포인터(180)의 헤드 업 신호(160) 지연은 기록 클록 도메인(102) 대 판독 클록 도메인(104)의 비율에 의해 제어되는 FIFO(110)에서 이용 가능한 전송 슬롯의 케이던스와 전송될 데이터가 정렬되는 것을 외부 로직 시간이 허용한다. 비동기식 모드에서, 준비 신호(165) 및 헤드 업 신호(160) 지연은 데이터 전송의 레이턴시에 직접적으로 추가된다. 그러나, 적절히 계산된 기록 오프셋(150) 및 판독 오프셋(155) 값으로, 준비 신호(165) 및 헤드 업 신호(160)는 프로세서(100)의 동작 내에서 흡수되어 전체 시스템 클록 도메인 전송 레이턴시를 감소시킬 수 있다. 일부 실시예들에서, 커밋 기록 포인터(170) 및 커밋 판독 포인터(180)는 플립 플롭 체인을 사용하여 기록 모듈(140) 및 판독 모듈(145)이 개별적으로 기록 또는 판독 동작을 수행하는 시간에 헤드 업 신호(160) 및 준비 신호(165)를 어써트하는 클록 사이클 사이에서 필요한 지연을 생성한다.
감소된 레이턴시 및 더 높은 대역폭을 가능하게 하기 위해, 제어기(106)는 기록 클록의 주파수(또는 주기) 대 판독 클록의 비율에 기초하여 기록 오프셋(150)을 기록 포인터(115)에 적용한다. 제어기(106)는 또한 판독 클록에 대한 기록 클록의 주파수(또는 주기)의 비율에 기초하여 판독 오프셋(155)을 판독 포인터(125)에 적용한다. 일부 실시예에서, 기록 오프셋(150) 및 판독 오프셋(155)은 모두 양의 정수이다. 일부 실시예들에서, 기록 오프셋(150) 및 판독 오프셋(155) 중 하나 또는 둘 모두는 음의 정수이다. 기록 오프셋(150) 및 판독 오프셋(155)은 개별적으로 기록 포인터(115) 및 판독 포인터(125)의 한계를 각각 어드밴스(advance)(양의 오프셋의 경우) 또는 리타드(retard)(음의 오프셋의 경우) 시키거나, FIFO(110)가 기록 포인터(115) 및 판독 포인터(125)가 기록 클록 도메인(102) 및 판독 클록 도메인(104)에 걸쳐 동기화되기를 대기하면서 스폴링하지 않음으로써 FIFO(110)가 전체 대역폭을 유지하는 것을 허용한다.
일부 실시예들에서, 제어기(106)는 아래 표 1에 제시된 변수들에 기초하여 기록 오프셋(150) 및 판독 오프셋(155)을 계산한다.
표 1
Figure pct00001
일부 실시예들에서, 제어기는 판독 오프셋(155)을 다음과 같이 계산한다 :
판독 오프셋 =(ReadPeriod *(SyncDepth + HeadsUp_m - 2.75))/LongPeriod
일부 실시예에서, 제어기(106)는 최종 분할을 제외하고 정수로 모든 계산을 수행하며, 나머지는 가장 가까운 정수로 반올림하는데 사용된다.
일부 실시예들에서, WritePeriod가 ReadPeriod 이하인 경우, 제어기는 다음과 같이 기록 오프셋(150)을 계산한다 :
기록 오프셋 =(WritePeriod *(SyncDepth + Rdy_m + 1) + 2 * ReadPeriod - LongPeriod * FifoDepth)/LongPeriod
일부 실시예들에서, WritePeriod가 ReadPeriod보다 큰 경우, 제어기는 다음과 같이 기록 오프셋(150)을 계산한다 :
기록 오프셋 = SyncDepth + Rdy_m - 2
일부 실시예에서, 이들 방정식은 10 대 1 및 1 대 10의 기록 클록 주파수 대 판독 클록 주파수의 비율에만 사용된다. 일부 실시예들에서, 제어기(106)는 FIFO(110)를 통해 각각의 방향에 대해 한번에, 2 회 기록 오프셋(150) 및 판독 오프셋(155)을 계산한다.
기록 클록 또는 판독 클록의 주파수의 변화에 응답하여, 제어기(106)는 제어된 방식으로 기록 오프셋(150) 및 판독 오프셋(155)의 값을 리셋한다. 일부 실시예들에서, 주파수 변경 요청을 수신한 것에 응답하여, 제어기(106)는 FIFO(110)를 간단한 비동기식 모드에 위치시키기 위해 기록 오프셋(150) 및 판독 오프셋(155)을 둘 모두 0으로 설정한다. 제어기(106)는 그런 다음 요청된 주파수와 일치하도록 기록 클록 및/또는 판독 클록을 조정하고, 기록 클록 및 판독 클록의 조정된 주파수의 비율에 기초하여 조정된 기록 오프셋(150) 및 판독 오프셋(155)을 결정한다.
도 2는 일부 실시예에 따라 FIFO(110)에 대한 기록 및 판독을 위해 기록 포인터(115)에 제로의 기록 오프셋(150)을 적용하고 판독 포인터(125)에 제로의 판독 오프셋(155)을 적용하는 도 1의 제어기(106)의 예를 도시한다. 특별히, 도 2는 개별적으로 기록 클록 및 판독 클록 신호의 예에 대응하는 파형(waveform)(240 및 241)을 도시한다. 도 2의 예를 위해, 기록 클록 및 판독 클록 신호는 동일한 주파수를 갖는다. 파형(240 및 241)은 각각 사이클 : 기록 클록(파형 240)의 사이클(250-259) 및 판독 클록(파형 241)의 사이클(260-269)의 사이클로 분할된다. 추가하여, 각각의 사이클(250-259)에 대해, 도 2는 기록 모듈(140)에 의해 기록될 데이터에 대한 기록 포인터(115)에 의해 지시되는 FIFO(110)의 위치를 나타내며, 각각의 사이클(260-269)에 대해, 도 2는 판독 모듈(145)에 의해 판독될 데이터에 대한 판독 포인터(125)에 의해 지시되는 FIFO(110)의 위치를 나타낸다.
도 2의 예에서, FIFO(110)는 8 개의 엔트리 깊이를 가지며, 판독 포인터 sync(130) 및 기록 포인터 sync(135)는 각각 4 플립 플롭의 깊이를 가지며, 헤드 업 신호(160)는 1 사이클 지연을 지정하고, 준비 신호(165)는 2 사이클 지연을 지정한다. FIFO(110)는 기록 포인터(115)와 판독 포인터(125)가 동일할 때 비어있다. FIFO(110)는 기록 포인터(115) 및 판독 포인터(125)의 최상위 비트(MSB)(도 2에 A 또는 B의 값을 갖는 것으로 도시됨)가 상이하지만 나머지 비트가 동일할 때 가득 차 있다(full). 따라서, 도시된 예에서, 기록 모듈(140)은 사이클(250) 동안 FIFO(110)의 위치 0에, 사이클(251) 동안 FIFO(110)의 위치 1에 기록하고, 등등, 사이클(257)을 통해, 기록 모듈(140)이 FIFO(110)의 위치 7에 기록하고, 그 후 위치 0의 판독이 아직 기록 모듈(140)에 전달되지 않았기 때문에 기록 모듈(140)은 위치 0에서 스톨링(stall)한다. 도시된 예에서, 판독 모듈(145)은 판독 클록의 사이클(266) 동안 FIFO(110)의 위치 1로부터 데이터를 판독하고, 이는 데이터가 FIFO(110)의 위치 1에 기록된 후 5 사이클이다.
도 2의 예와 유사한, 도 3의 예에서, 기록 클록 및 판독 클록 신호의 주파수는 동일하다. 도 3은 일부 실시예에 따라 FIFO(110)에 대한 기록 및 판독을 위해 기록 포인터(115)에 2의 기록 오프셋(150)을 적용하고 판독 포인터(125)에 2의 판독 오프셋(155)을 적용하는 도 1의 제어기(106)의 예를 도시한다. 도 2에 유사한, 도 3은 개별적으로 기록 클록 및 판독 클록 신호의 예에 대응하는 파형(340 및 341)을 도시한다. 파형(340 및 341)은 각각 사이클 : 기록 클록(파형 340)의 사이클(350-359) 및 판독 클록(파형 341)의 사이클(360-369)의 사이클로 분할된다. 추가하여, 각각의 사이클(350-359)에 대해, 도 3은 기록 모듈(140)에 의해 기록될 데이터에 대한 기록 포인터(115)에 의해 지시되는 FIFO(110)의 위치를 나타내며, 각각의 사이클(360-369)에 대해, 도 3은 판독 모듈(145)에 의해 판독될 데이터에 대한 판독 포인터(125)에 의해 지시되는 FIFO(110)의 위치를 나타낸다.
도 2의 예와 같이, 도 3의 예에서, FIFO(110)는 8 개의 엔트리 깊이를 가지며, 판독 포인터 sync(130) 및 기록 포인터 sync(135)는 각각 4 플립 플롭의 깊이를 가지며, 헤드 업 신호(160)는 1 사이클 지연을 지정하고, 준비 신호(165)는 2 사이클 지연을 지정한다. 기록 포인터(115) 및 판독 포인터(125)의 최상위 비트(MSB)가 A 또는 B의 값을 갖는 것으로 도 3에 도시된다. 도시된 예에서, 2의 기록 오프셋(150)을 기록 포인터(115)에 적용하고 2의 판독 오프셋(155)을 판독 포인터(125)에 적용하면, 기록 모듈(140)은 사이클(350) 동안 FIFO(110)의 위치 3에, 사이클(351) 동안의 FIFO(110)의 위치 4에 기록하고, 등등, 사이클(354)을 통해, 기록 모듈(140)이 FIFO(110)의 위치 7에 기록하고, 그 후 기록 모듈(140)은 위치 0에 기록한다. 도시된 예에서, 판독 모듈(145)은 판독 클록의 사이클(363) 동안 FIFO(110)의 위치 3으로부터 데이터를 판독하는데, 이는 데이터가 FIFO(110)의 위치 3에 기록된 후 3 사이클이다. 따라서, 2의 기록 오프셋(150)을 기록 포인터(115)에 적용하고 2의 판독 오프셋(155)을 판독 포인터(125)에 적용하면, 제어기(106)는 도 2에 도시된 5 사이클로부터 도 3에 도시된 3 사이클로 FIFO(110)의 레이턴시를 단축시킨다.
도 4는 일부 실시예에 따라 FIFO(110)에 대한 기록 및 판독을 위해 기록 포인터(115)에 제로의 기록 오프셋(150)을 적용하고 판독 포인터(125)에 제로의 판독 오프셋(155)을 적용하는 도 1의 제어기(106)의 예를 도시한다. 도 4는 개별적으로 기록 클록 및 판독 클록 신호의 예에 대응하는 파형(440 및 441)을 도시한다. 도 4의 예를 위해, 판독 클록 신호는 기록 클록 신호보다 50% 더 느리다. 파형(440 및 441)은 각각 사이클 : 기록 클록(파형 440)의 사이클(450-459) 및 판독 클록(파형 441)의 사이클(460-469)의 사이클로 분할된다. 추가하여, 각각의 사이클(450-459)에 대해, 도 4는 기록 모듈(140)에 의해 기록될 데이터에 대한 기록 포인터(115)에 의해 지시되는 FIFO(110)의 위치를 나타내며, 각각의 사이클(460-469)에 대해, 도 4는 판독 모듈(145)에 의해 판독될 데이터에 대한 판독 포인터(125)에 의해 지시되는 FIFO(110)의 위치를 나타낸다.
도 2 및 도 3의 예와 같이, 도 4의 예에서, FIFO(110)는 8 개의 엔트리 깊이를 가지며, 판독 포인터 sync(130) 및 기록 포인터 sync(135)는 각각 4 플립 플롭의 깊이를 가지며, 헤드 업 신호(160)는 1 사이클 지연을 지정하고, 준비 신호(165)는 2 사이클 지연을 지정한다. 기록 포인터(115) 및 판독 포인터(125)의 최상위 비트(MSB)가 A 또는 B의 값을 갖는 것으로 도 4에 도시된다. 따라서, 도시된 예에서, 기록 모듈(140)은 사이클(450) 동안 FIFO(110)의 위치 3에, 사이클(451) 동안 FIFO(110)의 위치 4에, 사이클(452) 동안 FIFO(110)의 위치 5에 기록하고, 등등, 사이클(456)을 통해, 기록 모듈(140)이 FIFO(110)의 위치 7에 기록하고, 그 후 기록 모듈(140)은 위치 0에 기록한다. 도시된 예에서, 판독 모듈(145)은 판독 클록의 사이클(466) 동안 FIFO(110)의 위치 5로부터 데이터를 판독하고, 이는 제 1 데이터 값 A가 FIFO(110)의 위치 5에 기록된 후 기록 클록의 7 사이클 및 판독 클록의 5사이클이다.
도 4의 예에 유사하게, 도 5의 예에서, 판독 클록 신호는 기록 클록 신호보다 50% 더 느리다. 도 5은 일부 실시예에 따라 FIFO(110)에 대한 기록 및 판독을 위해 기록 포인터(115)에 -1의 기록 오프셋(150)을 적용하고 판독 포인터(125)에 2의 판독 오프셋(155)을 적용하는 도 1의 제어기(106)의 예를 도시한다. 도 4에 유사한, 도 5는 개별적으로, 기록 클록 및 판독 클록 신호의 예에 대응하는 파형(540 및 541)을 도시한다. 파형(540 및 541)은 각각 사이클 : 기록 클록(파형(540))의 사이클(550-559) 및 판독 클록(파형(541))의 사이클(560-569)로 분할된다. 추가하여, 각각의 사이클(550-559)에 대해, 도 5는 기록 모듈(140)에 의해 기록될 데이터에 대한 기록 포인터(115)에 의해 지시되는 FIFO(110)의 위치를 나타내며, 각각의 사이클(560-569)에 대해, 도 5는 판독 모듈(145)에 의해 판독될 데이터에 대한 판독 포인터(125)에 의해 지시되는 FIFO(110)의 위치를 나타낸다.
도 4의 예와 같이, 도 5의 예에서, FIFO(110)는 8 개의 엔트리 깊이를 가지며, 판독 포인터 sync(130) 및 기록 포인터 sync(135)는 각각 4 플립 플롭의 깊이를 가지며, 헤드 업 신호(160)는 1 사이클 지연을 지정하고, 준비 신호(165)는 2 사이클 지연을 지정한다. 기록 포인터(115) 및 판독 포인터(125)의 최상위 비트(MSB)가 A 또는 B의 값을 갖는 것으로 도 5에 도시된다. 도시된 예에서, -1의 기록 오프셋(150)을 기록 포인터(115)에 적용하고 2의 판독 오프셋(155)을 판독 포인터(125)에 적용하면, 기록 모듈(140)은 사이클(550) 동안 FIFO(110)의 위치 2에, 사이클(551) 동안 FIFO(110)의 위치 3에, 사이클(553) 동안 FIFO(110)의 위치 4에, 사이클(554) 동안 위치 5에 기록하고, 등등, 사이클(557)을 통해, 기록 모듈(140)이 FIFO(110)의 위치 7에 기록하고, 그 후 기록 모듈(140)은 사이클(559)의 위치 0에 기록한다. 도시된 예에서, 판독 모듈(145)은 판독 클록의 사이클(565) 동안 FIFO(110)의 위치 5로부터 데이터를 판독하고, 이는 데이터가 FIFO(110)의 위치 5에 기록된 후 기록 클록의 4 사이클 및 판독 클록의 3 사이클이다. 따라서, -1의 기록 오프셋(150)을 기록 포인터(115)에 적용하고 2의 판독 오프셋(155)을 판독 포인터(125)에 적용하면, 제어기(106)는 도 4에 도시된 기록 클록의 7 사이클 및 판독 클록의 5 사이클로부터 도 5에 도시된 기록 클록의 4 사이클 및 판독 클록의 3 사이클로 FIFO(110)의 레이턴시를 단축시킨다.
도 6은 일부 실시예에 따라 도 1의 제어기(106)의 블록도를 도시한다. 도시된 예에서, 그리고 이하에서 추가로 설명되는 바와 같이, 제어기(106)는 개별적으로 기록 오프셋(150) 및 판독 오프셋(155)을 계산하고 커밋 기록 포인터(170) 및 커밋 판독 포인터(180)에 적용한다. 차례로, 커밋 기록 포인터(170) 및 커밋 판독 포인터(180)는 플립 플롭의 파이프 라인을 통해 개별적으로, 기록 포인터(115) 및 판독 포인터(125)를 직접 제어한다. 일부 실시예에서, 플립 플롭 파이프 라인의 깊이는 판독 및 헤드 업 신호(미도시)의 지연에 의존한다. 예를 들어, 준비 깊이가 0이고 헤드 업 깊이가 0이면, 커밋 기록 포인터(170) 및 커밋 판독 포인터(180)는 효과적으로 제거된다.
기록 클록 및 판독 클록의 상대적 주파수 뿐만 아니라 다른 파라미터 예컨대, FIFO(110)의 깊이, 기록 포인터 sync(135) 및 판독 포인터 sync(130)의 깊이, 및 헤드 업 신호(160) 및 준비 신호(165)의 사이클의 수를 고려함으로써, 제어기(106)는 기록 모듈(140)에 의해 FIFO(110)의 위치에 기록되는 시간과 판독 모듈(145)에 의해 FIFO(110)위치로부터 판독되는 시간 사이의 지연 동안 일어날 FIFO(110)의 각각의 측면으로 또는 측면 밖으로 전송 횟수를 예상할 수 있다. 제어기(106)는, 판독 모듈(145)이 커밋 판독 포인터(180)에 의해 지시된 FIFO(110)의 위치로부터 정확한 값을 판독하고, 기록 모듈(140)이 판독 모듈(145)에 의해 아직 판독되지 않은 FIFO(110)의 위치에서의 값을 덮어 쓰지 않는 것을 보장하기에 충분한 마진을 유지하면서 커밋 기록 포인터(170) 및 커밋 판독 포인터(180)가 그것들이 달리 지시했던 원래(raw) 값 이상으로 이동할 수 있게 하는 기록 오프셋(150) 및 판독 오프셋(155)에 대한 오프셋 값을 적용한다.
도 6의 예에서, 프로세서(100)는 클록 제너레이터(108), 제어기(106), 판독 오프셋(155), 커밋 판독 포인터(180), 판독 포인터 모듈(125), 기록 오프셋(150), 커밋 기록 포인터(170), 기록 포인터 모듈(115) 및 FIFO(110)을 포함한다. 판독 포인터 모듈(125)은 판독 모듈(미도시)에 대한 판독 포인터를 저장하도록 구성된다. "RD"로 지정된 신호의 어써트에 응답하여, 커밋 판독 포인터(180)는 FIFO(110)의 다음 위치를 가리키도록 판독 포인터 모듈(125)을 조정하고, 판독 포인터 모듈(125)은 결국 판독 포인터를 FIFO(110)에 제공한다. 이에 응답하여, FIFO(110)는 판독 포인터에 의해 지시된 위치를 판독하고 판독 데이터를 판독 모듈에 제공한다.
기록 포인터 모듈(115)은 FIFO(110)에 데이터를 기록하기 위해 판독 포인터 모듈(125)과 유사하게 구성된다. 특히, 기록 포인터 모듈(115)은 기록 모듈(미도시)에 대한 기록 포인터를 저장한다. "WRT"로 지정된 신호의 어써트에 응답하여, 커밋 기록 포인터(170)는 FIFO(110)의 다음 위치를 가리키도록 기록 포인터 모듈(115)을 조정하고, 기록 포인터 모듈(115)은 결국 기록 모듈(미도시)에 의해 제공된 데이터와 함께 기록 포인터를 FIFO(110)에 제공한다. 이에 응답하여, FIFO(110)는 기록 포인터에 의해 지시된 데이터 위치를 기록한다.
제어기(106)는 FIFO(110)로부터 데이터를 판독 및 거기에 데이터를 기록하기 위해 RD 및 WRT 신호를 생성하여 도 1, 도 3 및 도 5와 관련하여 전술한 바와 같이 기록 오프셋(150) 및 판독 오프셋(155)을 계산 및 적용하도록 구성된다. 특별히, 도 6의 예에서, 제어기(106)는 클록 제너레이터(108)로부터 주파수 변경 요청(610)을 수신한다. 주파수 변경 요청(610)은 클록 제너레이터(108)가 기록 CLK 및 판독 CLK 중 하나 또는 둘 다의 주파수를 변경할 것이라는 것을 나타낸다. 제어기(106)는 기록 CLK 및 판독 CLK의 조정된 주파수에 기초하여 새로운 기록 오프셋(150) 및 판독 오프셋(155)을 계산한다. 제어기(106)는 그런 다음 기록 포인터(115) 및 판독 포인터(125)가 FIFO(110)의 제 1 공통 엔트리를 통과하기를 대기하고, 그런 다음 프로세서(100)의 컴포넌트로부터의 데이터 전송을 일시적으로 정지시키고 판독 모듈에서 액세스하지 않은 데이터를 포함하는 FIFO(110)의 엔트리를 비운다. 제어기(106)는 FIFO(110)의 제 2 공통 엔트리에서 기록 포인터(115) 및 판독 포인터(125)를 정지시키고 새로운 기록 오프셋(150) 및 새로운 판독 오프셋(155)을 적용한다. 제어기(106)는 기록 포인터(115) 및 판독 포인터(150)를 재시작하고, 프로세서(100)의 컴포넌트로부터의 데이터 전송을 다시 인에이블(enable)한다.
도 7은 일부 실시예에 따른 클록 도메인들 중 하나 또는 둘 모두에 대한 클록 신호의 주파수 변화에 응답하여 FIFO에서 클록 도메인들 사이에서 데이터를 전송하기 위한 기록 오프셋(150) 및 판독 오프셋(155)을 설정하는 방법(700)의 흐름도이다. 방법(700)은 도 1에 도시된 프로세서(100)의 일부 실시예들에서 구현된다. 제어기(106)는 새로운 기록 오프셋(150) 또는 새로운 판독 오프셋(155)이 기록 클록(WRITE CLK) 및 판독 클록(READ CLK) 변경 주파수 중 하나 또는 둘 모두의 전후에 필요할 때마다 방법(700)을 수행한다. 방법(700)은 FIFO(110)를 통한 전송을 정지시키고, FIFO(110)로부터 모든 계류중인 엔트리를 플러시(flush)하고, 고정된 위치에서 기록 포인터(115) 및 판독 포인터(125)를 정지시키고, 새로운 기록 오프셋(150) 및 판독 오프셋(155) 값을 적용하고, 제어된 방식으로 기록 포인터(115) 및 판독 포인터(125)를 재시작하고, 마지믹으로 FIFO(110)를 통한 데이터 전송을 재개함으로써 기록 오프셋(150) 및 판독 오프셋(155)이 변경될 때 데이터가 손실 또는 복제되지 않도록 한다.
일부 실시예에서, 제어기(106)는 하나의 기록 클록 도메인(102) 및 다른 하나의 판독 클록 도메인(104)에 대한 방법(700)의 2 개의 병렬 인스턴스를 동작시킨다. 방법(700)의 여러 지점에서, 기록 포인터(115) 및 판독 포인터(125)는 방법(700)의 판독 클록 도메인(102) 및 기록 클록 도메인(104)의 병렬 버전이 적절한 작동을 위해 필요한 시간과 거의 같은 시간 또는 동시에 동일한 블록(702 내지 724)에 있도록 조정된 방식으로 동작하도록 요구된다.
블록(702)에서, 제어기(106)는 주파수 변경이 진행 중인지 그리고 새로운 기록 오프셋(150) 및 판독 오프셋(155)이 필요한 지를 결정한다. 만약 그렇지 않다면, 방법 흐름은 블록(702)으로 돌아 간다. 새로운 기록 오프셋(150) 및 판독 오프셋(155)이 요구되면, 블록(704)에서, 제어기(106)는 새로운 기록 오프셋(150) 및 판독 오프셋(155)을 계산한다. 블록(706)에서, 제어기(106)는 판독 포인터(115) 및 기록 포인터(125)가 제 1 공통 기준점(common reference point)을 통과할 때까지 대기한다. 공통 기준점은 기록 클록 도메인(102) 및 판독 클록 도메인(104)에서의 방법(700)의 인스턴스가 합의한 FIFO(110)에서의 정의된 위치이다. 일부 실시예에서, 공통 기준점은 FIFO(110) 엔트리 0A이다. 일부 실시예에서, 공통 기준점은 커밋 기록 포인터(170) 및 커밋 판독 포인터(180)에 의해 추적되는 FIFO(110) 엔트리이다. 커밋 기록 포인터(170) 및 커밋 판독 포인터(180)의 사용은 준비 신호(165)의 모든 펄스가 대응하는 헤드 업 신호(160)를 갖고 및 블록(708)의 엔트리에서 여전히 FIFO(110)에 있는 엔트리는 여전히 판독 모듈(145)에 의해 판독될 것이며 상응하는 헤드 업 신호(160)의 펄스를 갖는다.
블록(708)에서, 기록 포인터(125) 및 판독 포인터(115)가 제 1 공통 기준점을 통과한 후, 제어기(106)는 프로세서(100)에 연결된 컴포넌트들에게 전송이 이용 가능하지 않다는 것을 통지하기 위해 준비 신호(165) 및 헤드 업 신호(160) 값을 로우(low)로 강제한다. 그러나, 프로세서(100) 외부의 컴포넌트가 스톨링되는 동안, 기록 포인터(115) 및 판독 포인터(125)는 방법(700)을 수행하기 위해 프로세서(100) 내에서 계속 작동한다. 블록(710)에서, 제어기(106)는 FIFO(110)에서 판독 모듈(145)에 의한 판독 대기중인 임의의 데이터를 드레인(drain)한다. 일부 실시예들에서, 커밋 기록 포인터(170) 및 커밋 판독 포인터(180)를 통해 준비 신호(165) 및 헤드 업 신호(160)를 로우로 강제하는 것은 방법(700)이 블록(708)에 도달 할 때 FIFO(110)를 통한 임의의 전송은 커밋 기록 포인터(170) 및 커밋 판독 포인터(180) 내에서 사용 된 플립 플롭 파이프 라인이 데이터 손실을 방지하기 위해 기록 포인터(115) 및 판독 포인터(125)를 개별적으로 동작시키기 위한 적절한 값을 함유할 것이므로 적절한 헤드 업 신호(160)를 여전히 갖는 것을 보장한다.
블록(712)에서, 먼저 커밋 기록 포인터(170) 및 이어서 기록 포인터(115)는 제 2 공통 기준점에서 정지한다. 커밋 판독 포인터(180) 및 판독 포인터(125)는 그런 다음 제 2 공통 기준점에서 정지한다. 일부 실시예에서, 제 2 공통 기준점은 FIFO(110) 엔트리 0B이다. 기록 포인터(115) 및 판독 포인터(125)가 정지하면, 제어기(106)는 블록(714)에서 새로운 판독 기록 오프셋(150) 및 새로운 판독 오프셋(155)을 적용한다. 블록(716)에서, 판독 포인터 sync(130)가 제 2 공통 기준점에 도달했다는 것을 검출하면 제어기(106)는 기록 포인터(115)를 재시작한다. 블록(718)에서, 판독 포인터(125)는 기록 포인터 sync(136)가 제 2 공통 기준점을 지나 이동하는 것을 검출한다. 커밋 판독 포인터(180)는 내부 플립 플롭 파이프 라인을 바이패스(bypass)하고 동시에 판독 포인터(125)와 커밋 판독 포인터(180)를 이동시키기 시작하고, 커밋 판독 포인터(180)와 판독 포인터(125) 사이의 파이프 라인에서 플립 플롭 수 만큼 커밋 판독 포인터(180)를 어드밴스시킨다. 커밋 판독 포인터(180)를 갖는 실시예에서, 블록(718)은 커밋 판독 포인터(180) 파이프 라인 깊이에 기초하여 기록 포인터(115)와 판독 포인터(125) 사이의 시간 차이가 스큐(skew)되지 않도록 한다.
블록(720)에서, 제어기(106)는 기록 포인터(115) 및 판독 포인터(125)가 제 1 공통 기준점으로 복귀할 때까지 대기하여, 기록 포인터(115) 및 판독 포인터(125)가 적절한 시간 차이로 정착할 시간을 제공한다. 블록(722)에서, 제어기(106)는 새로운 프로세서(100) 구성에 대한 적절한 값으로 준비 신호(165) 및 헤드 업 신호(160)를 복원함으로써 정상 트래픽을 인에이블한다. 블록(724)에서, 제어기(106)는 방법(700)이 완료되었음을 나타내는 신호를 클록 제너레이터(108)에 발송한다.
일부 실시예에서, 방법은 프로세서의 제 1 클록 도메인에서, 버퍼의 깊이 및 제 1 오프셋 값에 기초하여 버퍼의 복수의 엔트리에 대한 기록 포인터의 위치를 증분시키는 단계; 상기 프로세서의 기록 모듈에서, 상기 제 1 엔트리를 나타내는 상기 기록 포인터에 응답하여 상기 버퍼의 복수의 엔트리 중 제 1 엔트리에 액세스하는 단계; 상기 프로세서의 제 2 클록 도메인에서, 상기 기록 포인터의 위치 및 제 2 오프셋 값에 기초하여 상기 버퍼의 복수의 엔트리에 대한 판독 포인터의 위치를 증분시키는 단계로서, 상기 제 2 오프셋 값은 상기 제 1 클록 도메인의 제 1 클록 신호의 제 1 주파수 대 상기 제 2 클록 도메인의 제 2 클록 신호의 제 2 주파수의 비율에 기초하고, 상기 제 2 클록 신호는 상기 제 1 클록 신호와 비동기인, 상기 판독 포인터의 위치를 증분시키는 단계; 및 상기 프로세서의 판독 모듈에서, 상기 제 1 엔트리를 나타내는 판독 포인터에 응답하여 버퍼의 복수의 엔트리 중 제 1 엔트리에 액세스하는 단계를 포함한다. 일 양태에서, 제 1 오프셋 값은 제 1 주파수 대 제 2 주파수의 비율에 기초한다. 다른 양태에서, 제 1 오프셋 값은 제 1 클록 도메인과 제 2 클록 도메인 사이의 동기화기의 깊이에 기초한다.
일 양태에서, 상기 방법은 기록 모듈이 버퍼에 액세스할 것임을 나타내는 신호를 어써트하는 단계를 포함하고, 제 1 오프셋 값은 신호의 어써트와 버퍼에 기록 모듈 액세스 사이의 제 1 클록 신호의 클록 사이클의 수에 추가로 기초한다. 다른 양태에서, 제 2 오프셋 값은 또한 제 1 클록 도메인과 제 2 클록 도메인 사이의 동기화기의 깊이에 기초한다. 또 다른 양태에서, 방법은 제 1 주파수를 제 1 조정된 주파수로 조정하기 위한 요청 또는 제 2 주파수를 제 2 조정된 주파수 로 조정하기 위한 요청에 응답하여 제 1 오프셋 값 및 제 2 오프셋 값을 재설정하는 단계를 포함한다. 일 양태에서, 제 1 오프셋 값 및 제 2 오프셋 값을 재설정하는 단계는 : 상기 제 1 조정 주파수가 상기 제 2 조정 주파수보다 높은 것에 응답하여 상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 기록 포인터에 대한 제 1 조정 오프셋 값을 결정하는 단계; 상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 판독 포인터에 대한 제 2 조정 오프셋 값을 결정하는 단계; 상기 판독 모듈에 의해 액세스되지 않은 데이터를 포함하는 버퍼의 엔트리를 비우는 단계; 상기 버퍼의 공통 엔트리에서 기록 포인터 및 판독 포인터를 정지시키는 단계; 상기 제 1 조정 오프셋 값에 기초하여 상기 기록 포인터의 위치를 증분시키는 단계; 및 상기 제 2 조정 오프셋 값에 기초하여 판독 포인터의 위치를 증분시키는 단계를 포함한다.
일부 실시예에서, 방법은 프로세서의 제 1 클록 도메인에서, 제 1 오프셋 값에 기초하여, 깊이를 갖는 선입 선출 버퍼(FIFO)에 대한 기록 포인터의 위치를 오프셋시키는 단계; 프로세서의 제 2 클록 도메인에서, 제 2 오프셋 값에 기초하여 FIFO에 대한 판독 포인터의 위치를 오프셋시키는 단계로서, 상기 제 2 오프셋 값은 제 1 클록 도메인의 제 1 클록 신호의 제 1 주기 대 제 2 클록 도메인의 제 2 클록 신호의 제 2 주기에 대한 비율에 기초한, 상기 판독 포인터의 위치를 오프셋시키는 단계; 상기 프로세서의 기록 모듈에서, 상기 기록 포인터의 위치에 기초하여 상기 FIFO의 제 1 엔트리에 액세스하는 단계; 제 1 엔트리에 액세스하는 것에 응답하여 FIFO에 대하여 기록 포인터를 증분시키는 단계; 프로세서의 판독 모듈에서, FIFO에 대한 판독 포인터의 위치에 기초하여 FIFO의 제 1 엔트리로부터 판독하는 단계; 및 제 1 엔트리로부터의 판독에 응답하여 FIFO에 대한 판독 포인터를 증분시키는 단계를 포함한다. 일 양태에서, 제 1 오프셋 값은 제 1 주기 대 제 2 주기의 비율에 기초한다. 다른 양태에서, 제 1 오프셋 값은 제 1 클록 도메인과 제 2 클록 도메인 사이의 동기화기의 깊이에 기초한다.
또 다른 양태에서, 방법은 기록 모듈이 버퍼에 액세스할 것임을 나타내는 신호를 어써트하는 단계를 포함하고, 제 1 오프셋 값은 신호의 어써트와 버퍼의 기록 모듈 액세스 사이의 제 1 클록 신호의 클록 사이클의 수에 더 기초한다. 또 다른 양태에서, 방법은 제 1 주기를 제 1 조정 주기로 조정하라는 요청에 또는 제 2 주기를 제 2 조정 주기로 조정하라는 요청에 응답하여 제 1 오프셋 값 및 제 2 오프셋 값을 재설정하는 단계를 포함한다. 다른 양태에서, 제 1 오프셋 값 및 제 2 오프셋 값을 재설정하는 단계는 : 상기 제 1 조정 주파수가 상기 제 2 조정 주파수보다 높은 것에 응답하여 상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 기록 포인터에 대한 제 1 조정 오프셋 값을 결정하는 단계; 상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 판독 포인터에 대한 제 2 조정 오프셋 값을 결정하는 단계; 상기 판독 모듈에 의해 액세스되지 않은 데이터를 포함하는 버퍼의 엔트리를 비우는 단계; 상기 버퍼의 공통 엔트리에서 기록 포인터 및 판독 포인터를 정지시키는 단계; 상기 제 1 조정 오프셋 값에 기초하여 상기 기록 포인터의 위치를 증분시키는 단계; 및 상기 제 2 조정 오프셋 값에 기초하여 판독 포인터의 위치를 증분시키는 단계를 포함한다.
일부 실시예에서, 프로세서는 선입 선출 버퍼(FIFO); 제 1 클록 도메인으로서 : 기록 포인터; 제 1 동기화기; 및 상기 FIFO에 대한 상기 기록 포인터의 위치에 응답하여 상기 FIFO의 제 1 엔트리에 액세스하도록 구성된 기록 모듈을 포함하고, 상기 기록 포인터의 위치는 상기 FIFO의 깊이 및 제 1 오프셋 값에 기초하는, 상기 제 1 클록 도메인; 제 2 클록 도메인으로서 : 판독 포인터; 제 2 동기화기; 및 상기 FIFO에 대한 상기 판독 포인터의 위치에 응답하여 상기 FIFO의 제 1 엔트리에 액세스하도록 구성된 판독 모듈을 포함하고, 상기 판독 포인터의 위치는 상기 기록 포인터의 위치 및 제 2 오프셋 값에 기초하는, 상기 제 2 클록 도메인; 및 제 1 오프셋 값 및 제 2 오프셋 값을 결정하도록 구성된 제어기를 포함한다. 일 양태에서, 제어기는 제 1 클록 도메인의 제 1 클록 신호의 제 1 주파수 대 제 2 클록 도메인의 제 2 클록 신호의 제 2 주파수의 비율에 기초하여 제 1 오프셋 값을 결정하도록 구성되고, 제 2 클록 신호는 제 1 클록 신호와 비동기이다.
다른 양태에서, 제어기는 제 1 동기화기의 깊이에 기초하여 제 1 오프셋 값을 결정하도록 구성된다. 또 다른 양태에서, 기록 모듈은 기록 모듈이 버퍼에 액세스할 것임을 나타내는 신호를 어써트하도록 추가로 구성되고, 제어기는 신호의 어써트 버퍼의 기록 모듈 액세스 사이의 제 1 클록 신호의 클록 사이클의 수에 기초하여 제 1 오프셋 값을 결정하도록 추가로 구성된다. 일 양태에서, 제어기는 제 1 클록 도메인의 제 1 클록 신호의 제 1 주파수 대 제 2 클록 도메인의 제 2 클록 신호의 제 2 주파수의 비율에 기초하여 제 2 오프셋 값을 결정하도록 구성되고, 제 2 클록 신호는 제 1 클록 신호와 비동기이다. 다른 양태에서, 제어기는 제 1 주파수를 제 1 조정된 주파수로 조정하라는 요청 또는 제 2 주파수를 제 2 조정된 주파수로 조정하라는 요청에 응답하여 제 1 오프셋 값 및 제 2 오프셋 값을 재설정하도록 구성된다. 또 다른 양태에서, 상기 제어기는 : 상기 제 1 조정 주파수가 상기 제 2 조정 주파수보다 높은 것에 응답하여 상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 기록 포인터에 대한 제 1 조정 오프셋 값을 결정하고; 제 1 조정 주파수 대 제 2 조정 주파수의 비율에 기초하여 판독 포인터에 대한 제 2 조정 오프셋 값을 결정하고; 판독 모듈에 의해 액세스되지 않은 데이터를 포함하는 FIFO의 엔트리를 비우고; FIFO의 공통 엔트리에서 기록 포인터 및 판독 포인터를 정지시키고; FIFO의 깊이 및 제 1 조정 오프셋 값에 기초하여 기록 포인터의 위치를 증분시키고; 및 기록 포인터의 위치 및 제 2 조정 오프셋 값에 기초하여 판독 포인터의 위치를 증분시키도록 추가로 구성된다.
일부 실시예에서, 전술한 장치 및 기술은 도 1 내지 도 7을 참조하여 전술한 멀티미디어 시스템과 같은 하나 이상의 집적 회로(IC) 디바이스(집적 회로 패키지 또는 마이크로 칩이라고도 함)를 포함하는 시스템으로 구현된다. 이들 IC 디바이스의 디자인 및 제조에는 전자 디자인 자동화(EDA) 및 컴퓨터 보조 디자인(CAD) 소프트웨어 툴이 사용된다. 이러한 디자인 툴은 전형적으로 하나 이상의 소프트웨어 프로그램으로 표시된다. 하나 이상의 소프트웨어 프로그램은 회로부를 제조하는 제조 시스템을 디자인하거나 적응시키는 프로세스의 적어도 일부를 수행하기 위해 하나 이상의 IC 디바이스의 회로를 나타내는 코드상에서 동작하도록 컴퓨터 시스템을 조작하기 위해 컴퓨터 시스템에 의해 실행 가능한 코드를 포함한다. 이 코드는 명령, 데이터 또는 명령과 데이터의 조합을 포함한다. 디자인 툴 또는 제조 툴을 나타내는 소프트웨어 명령은 전형적으로 컴퓨팅 시스템에 액세스 가능한 컴퓨터 판독 가능 저장 매체에 저장된다. 마찬가지로, IC 디바이스의 디자인 또는 제조의 하나 이상의 단계를 나타내는 코드는 동일한 컴퓨터 판독 가능 저장 매체 또는 상이한 컴퓨터 판독 가능 저장 매체에 저장되어 액세스될 수 있다.
컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 명령 및/또는 데이터를 제공하기 위해 사용 중에 컴퓨터 시스템에 의해 액세스 가능한 임의의 비 일시적 스토리지 매체, 또는 비 일시적 스토리지 매체의 조합을 포함한다. 이러한 저장 매체는 광 매체(예를 들어, CD(Compact Disc), DVD(Digital Versatile Disc), 블루 레이 디스크) , 자기 미디어(예를 들어, 플로피 디스크 , 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 램덤 액세스 메모리(RAM) 또는 캐시), 비 휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리) 또는 MEMS(microelectromechanical systems) 기반 저장 매체를 포함하지만, 이에 한정되지는 않는다. 일 실시예에서, 컴퓨터 판독 가능 저장 매체는 컴퓨팅 시스템(예를 들어, 시스템 RAM 또는 ROM)에 내장되거나, 컴퓨팅 시스템(예를 들어, 자기 하드 드라이브)에 고정적으로 부착되거나, 컴퓨팅 시스템(예를 들어, 광 디스크 또는 범용 직렬 버스(USB) 기반 플래시 메모리)에 착탈 가능하게 부착되거나 또는 유선 또는 무선 네트워크(예를 들어, 네트워크 액세스 가능 스토리지(NAS))를 통해 컴퓨터 시스템에 결합된다.
일부 실시예에서, 전술한 기술의 특정 양태는 소프트웨어를 실행하는 프로세싱 시스템의 하나 이상의 프로세서에 의해 구현될 수 있다. 소프트웨어는 비 일시적인 컴퓨터 판독 가능 저장 매체 상에 저장되거나 그렇지 않으면 유형의 구현된 하나 이상의 세트의 실행 가능 명령을 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때 하나 이상의 프로세서를 조작하여 전술한 기술의 하나 이상의 양태를 수행하는 명령 및 특정 데이터를 포함한다. 비 일시적 컴퓨터 판독 가능 저장 매체는 예를 들어, 자기 또는 광 디스크 저장 디바이스, 플래시 메모리와 같은 고체 상태 저장 디바이스, 캐시, 랜덤 액세스 메모리(RAM) 또는 다른 비 휘발성 메모리 디바이스 또는 디바이스들 등을 포함한다. 비 일시적 컴퓨터 판독 가능한 메모리 매체에 저장된 실행 가능한 명령은 예를 들어, 소스 코드, 어셈블리 언어 코드, 객체 코드, 해석되거나 또는 하나 이상의 프로세서에 의해 실행 가능한 다른 명령 포맷으로 구현된다.
전체적인 설명에서 상기에서 설명된 모든 활동이나 엘리먼트가 요구되는 것은 아니며 특정 활동이나 디바이스의 일부가 필요하지 않을 수 있으며 하나 이상의 추가 활동이 수행되거나 엘리먼트가 설명된 것들에 추가하여 포함될 수 있음에 유의한다. 더 나아가, 활동이 나열되는 순서가 반드시 수행되는 순서와 다를 수 있다. 또한, 개념들은 특정 실시예를 참조하여 설명되었다. 그러나, 당업자는 이하의 청구 범위에 설명된 바와 같이 본 개시의 범위를 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있음을 이해할 것이다. 따라서, 상세한 설명 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 하며, 그러한 모든 수정은 본 발명의 범위 내에 포함되는 것으로 의도된다.
특정 실시예들과 대한 장점들, 다른 장점들 및 문제들에 대한 해결책들이 상기에서 설명되었다. 그러나 임의의 장점, 이점 또는 해결책을 더 명확하게 하거나 만들 수 있는 문제점 및 임의의 특징(들)에 대한 장점, 이점, 해결책은 임의의 또는 모든 청구항들의 중요하고 필수적이며 본질적인 특징으로 해석되어서는 안된다. 또한, 개시된 주제가 본 출원의 교시의 장점을 갖는 당업자에게 명백한 상이하지만 동등한 방식으로 수정되고 실시될 수 있기 때문에, 개시된 특정 실시예는 단지 예시적인 것이다. 어떠한 제한도 이하의 청구 범위에 기재된 이외에 본 출원에 도시된 구성 또는 디자인의 세부 사항에 의도되지 않는다. 따라서, 상기 개시된 특정 실시예는 변경되거나 수정될 수 있으며 모든 그러한 변형은 개시된 주제의 범위 내에서 고려되는 것이 명백하다. 따라서, 본 출원에서 추구하는 보호는 이하의 청구 범위에 개시된 바와 같다.

Claims (20)

  1. 방법에 있어서,
    프로세서의 제 1 클록 도메인에서, 버퍼의 깊이 및 제 1 오프셋 값에 기초하여 상기 버퍼의 복수의 엔트리에 대한 기록 포인터의 위치를 증분시키는 단계;
    상기 프로세서의 기록 모듈에서, 상기 제 1 엔트리를 나타내는 상기 기록 포인터에 응답하여 상기 버퍼의 복수의 엔트리 중 제 1 엔트리에 액세스하는 단계;
    상기 프로세서의 제 2 클록 도메인에서, 상기 기록 포인터의 위치 및 제 2 오프셋 값에 기초하여 상기 버퍼의 복수의 엔트리에 대한 판독 포인터의 위치를 증분시키는 단계로서, 상기 제 2 오프셋 값은 상기 제 1 클록 도메인의 제 1 클록 신호의 제 1 주파수 대 상기 제 2 클록 도메인의 제 2 클록 신호의 제 2 주파수의 비율에 기초하고, 상기 제 2 클록 신호는 상기 제 1 클록 신호와 비동기(asynchronous)인, 상기 판독 포인터의 위치를 증분시키는 단계; 및
    상기 프로세서의 판독 모듈에서, 상기 제 1 엔트리를 나타내는 상기 판독 포인터에 응답하여 상기 버퍼의 복수의 엔트리 중 상기 제 1 엔트리에 액세스하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서, 상기 제 1 오프셋 값은 상기 제 1 주파수 대 상기 제 2 주파수의 비율에 기초하는, 방법.
  3. 제 1 항에 있어서, 상기 제 1 오프셋 값은 상기 제 1 클록 도메인과 상기 제 2 클록 도메인 사이의 동기화기(synchronizer)의 깊이에 기초하는, 방법.
  4. 제 3 항에 있어서, 상기 기록 모듈이 상기 버퍼에 액세스할 것임을 나타내는 신호를 어써트하는 단계(asserting)를 더 포함하고, 상기 제 1 오프셋 값은 상기 신호의 어써트와 상기 버퍼의 상기 기록 모듈 액세스 사이의 상기 제 1 클록 신호의 클록 사이클의 수에 더 기초하는, 방법.
  5. 제 1 항 내지 제 4 항 중 어느 한 항에 있어서, 상기 제 2 오프셋 값은 상기 제 1 클록 도메인과 상기 제 2 클록 도메인 사이의 동기화기의 깊이에 추가로 기초하는, 방법.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서, 상기 제 1 주파수를 제 1 조정 주파수로 조정하라는 요청 또는 상기 제 2 주파수를 제 2 조정 주파수로 조정하라는 요청에 응답하여 상기 제 1 오프셋 값 및 상기 제 2 오프셋 값을 재설정하는 단계를 더 포함하는, 방법.
  7. 제 6 항에 있어서, 상기 제 1 오프셋 값 및 상기 제 2 오프셋 값을 재설정하는 단계는,
    상기 제 1 조정 주파수가 상기 제 2 조정 주파수보다 높은 것에 응답하여 상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 기록 포인터에 대한 제 1 조정 오프셋 값을 결정하는 단계;
    상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 판독 포인터에 대한 제 2 조정 오프셋 값을 결정하는 단계;
    상기 판독 모듈에 의해 액세스되지 않은 데이터를 포함하는 상기 버퍼의 엔트리를 비우는 단계;
    상기 버퍼의 공통 엔트리에서 상기 기록 포인터 및 상기 판독 포인터를 정지시키는 단계;
    상기 제 1 조정 오프셋 값에 기초하여 상기 기록 포인터의 위치를 증분시키는 단계; 및
    상기 제 2 조정 오프셋 값에 기초하여 상기 판독 포인터의 위치를 증분시키는 단계를 포함하는, 방법.
  8. 방법에 있어서,
    프로세서의 제 1 클록 도메인에서, 제 1 오프셋 값에 기초하여, 깊이를 갖는 선입 선출 버퍼(FIFO)에 대한 기록 포인터의 위치를 오프셋시키는 단계;
    상기 프로세서의 제 2 클록 도메인에서, 제 2 오프셋 값에 기초하여 상기 FIFO에 대한 판독 포인터의 위치를 오프셋시키는 단계로서, 상기 제 2 오프셋 값은 상기 제 1 클록 도메인의 제 1 클록 신호의 제 1 주기 대 상기 제 2 클록 도메인의 제 2 클록 신호의 제 2 주기에 대한 비율에 기초한, 상기 판독 포인터의 위치를 오프셋시키는 단계;
    상기 프로세서의 기록 모듈에서, 상기 기록 포인터의 위치에 기초하여 상기 FIFO의 제 1 엔트리에 액세스하는 단계;
    상기 제 1 엔트리에 액세스하는 것에 응답하여 상기 FIFO에 대한 기록 포인터를 증분시키는 단계;
    상기 프로세서의 판독 모듈에서, 상기 FIFO에 대한 판독 포인터의 위치에 기초하여 상기 FIFO의 제 1 엔트리로부터 판독하는 단계; 및
    상기 제 1 엔트리로부터의 판독에 응답하여 상기 FIFO에 대한 판독 포인터를 증분시키는 단계를 포함하는, 방법.
  9. 제 8 항에 있어서, 상기 제 1 오프셋 값은 상기 제 1 주기 대 상기 제 2 주기의 비율에 기초하는, 방법.
  10. 제 8 항에 있어서, 상기 제 1 오프셋 값은 상기 제 1 클록 도메인과 상기 제 2 클록 도메인 사이의 동기화기의 깊이에 기초하는, 방법.
  11. 제 10 항에 있어서, 상기 기록 모듈이 상기 버퍼에 액세스할 것임을 나타내는 신호를 어써트하는 단계(asserting)를 더 포함하고, 상기 제 1 오프셋 값은 상기 신호의 어써트과 상기 버퍼의 상기 기록 모듈 액세스 사이의 상기 제 1 클록 신호의 클록 사이클의 수에 더 기초하는, 방법.
  12. 제 8 항 내지 제 11 항 중 어느 한 항에 있어서, 상기 제 1 주기를 제 1 조정 주기로 조정하라는 요청 또는 상기 제 2 주기를 제 2 조정 주기로 조정하라는 요청에 응답하여 상기 제 1 오프셋 값 및 상기 제 2 오프셋 값을 재설정하는 단계를 더 포함하는, 방법.
  13. 제 12 항에 있어서, 상기 제 1 오프셋 값 및 상기 제 2 오프셋 값을 재설정하는 단계는,
    상기 제 1 조정 주파수가 상기 제 2 조정 주파수보다 높은 것에 응답하여 상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 기록 포인터에 대한 제 1 조정 오프셋 값을 결정하는 단계;
    상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 판독 포인터에 대한 제 2 조정 오프셋 값을 결정하는 단계;
    상기 판독 모듈에 의해 액세스되지 않은 데이터를 포함하는 상기 버퍼의 엔트리를 비우는 단계;
    상기 버퍼의 공통 엔트리에서 상기 기록 포인터 및 상기 판독 포인터를 정지시키는 단계;
    상기 제 1 조정 오프셋 값에 기초하여 상기 기록 포인터의 위치를 증분시키는 단계; 및
    상기 제 2 조정 오프셋 값에 기초하여 상기 판독 포인터의 위치를 증분시키는 단계를 포함하는, 방법.
  14. 프로세서로서,
    선입 선출 버퍼(FIFO);
    제 1 클록 도메인으로서,
    기록 포인터;
    제 1 동기화기; 및
    상기 FIFO에 대한 상기 기록 포인터의 위치에 응답하여 상기 FIFO의 제 1 엔트리에 액세스하도록 구성된 기록 모듈을 포함하고, 상기 기록 포인터의 위치는 상기 FIFO의 깊이 및 제 1 오프셋 값에 기초하는, 상기 제 1 클록 도메인;
    제 2 클록 도메인으로서,
    판독 포인터;
    제 2 동기화기; 및
    상기 FIFO에 대한 상기 판독 포인터의 위치에 응답하여 상기 FIFO의 제 1 엔트리에 액세스하도록 구성된 판독 모듈을 포함하고, 상기 판독 포인터의 위치는 상기 기록 포인터의 위치 및 제 2 오프셋 값에 기초하는, 상기 제 2 클록 도메인; 및
    상기 제 1 오프셋 값 및 상기 제 2 오프셋 값을 결정하도록 구성된 제어기를 포함하는, 프로세서.
  15. 제 14 항에 있어서, 상기 제어기는 상기 제 1 클록 도메인의 제 1 클록 신호의 제 1 주파수 대 상기 제 2 클록 도메인의 제 2 클록 신호의 제 2 주파수의 비율에 기초하여 상기 제 1 오프셋 값을 결정하도록 구성되고, 상기 제 2 클록 신호는 상기 제 1 클록 신호와 비동기인, 프로세서.
  16. 제 14 항에 있어서, 상기 제어기는 상기 제 1 동기화기의 깊이에 기초하여 상기 제 1 오프셋 값을 결정하도록 구성된, 프로세서.
  17. 제 14 항에 있어서, 상기 기록 모듈이 상기 버퍼에 액세스할 것임을 나타내는 신호를 어써트하도록 상기 기록 모듈이 추가로 구성되고, 상기 제어기는 상기 제 1 오프셋 값을 신호의 어써트와 상기 버퍼의 기록 모듈 액세스 사이의 제 1 클록 신호의 상기 클록 사이클의 수에 기초하여 결정하도록 구성되는, 프로세서.
  18. 제 14 항에 있어서, 상기 제어기는 상기 제 1 클록 도메인의 제 1 클록 신호의 제 1 주파수 대 상기 제 2 클록 도메인의 제 2 클록 신호의 제 2 주파수의 비율에 기초하여 상기 제 2 오프셋 값을 결정하도록 구성되고, 상기 제 2 클록 신호는 상기 제 1 클록 신호와 비동기인, 프로세서.
  19. 제 14 항 내지 제 18 항 중 어느 한 항에 있어서, 상기 제어기는 상기 제 1 주파수를 제 1 조정 주파수로 조정하라는 요청 또는 상기 제 2 주파수를 제 2 조정 주파수로 조정하라는 요청에 응답하여 상기 제 1 오프셋 값 및 상기 제 2 오프셋 값을 재설정하도록 구성된, 프로세서.
  20. 제 19 항에 있어서, 상기 제어기는,
    상기 제 1 조정 주파수가 상기 제 2 조정 주파수보다 높은 것에 응답하여 상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 기록 포인터에 대한 제 1 조정 오프셋 값을 결정하고;
    상기 제 1 조정 주파수 대 상기 제 2 조정 주파수의 비율에 기초하여 상기 판독 포인터에 대한 상기 제 2 조정 오프셋 값을 결정하고;
    상기 판독 모듈에 의해 액세스되지 않은 데이터를 포함하는 상기 FIFO의 엔트리를 비우고;
    상기 FIFO의 공통 엔트리에서 상기 기록 포인터 및 상기 판독 포인터를 정지시키고;
    상기 FIFO의 깊이 및 상기 제 1 조정 오프셋 값에 기초하여 상기 기록 포인터의 위치를 증분시키고; 및
    상기 기록 포인터의 위치 및 상기 제 2 조정 오프셋 값에 기초하여 상기 판독 포인터의 위치를 증분시키도록 추가로 구성된, 프로세서.
KR1020207019940A 2017-12-11 2018-09-24 포인터 오프셋이 있는 비동기식 버퍼 KR102427775B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/837,951 2017-12-11
US15/837,951 US10592442B2 (en) 2017-12-11 2017-12-11 Asynchronous buffer with pointer offsets
PCT/US2018/052378 WO2019118040A1 (en) 2017-12-11 2018-09-24 Asynchronous buffer with pointer offsets

Publications (2)

Publication Number Publication Date
KR20200088499A true KR20200088499A (ko) 2020-07-22
KR102427775B1 KR102427775B1 (ko) 2022-08-01

Family

ID=66696195

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207019940A KR102427775B1 (ko) 2017-12-11 2018-09-24 포인터 오프셋이 있는 비동기식 버퍼

Country Status (6)

Country Link
US (1) US10592442B2 (ko)
EP (1) EP3724741A4 (ko)
JP (1) JP7299890B2 (ko)
KR (1) KR102427775B1 (ko)
CN (1) CN111512261A (ko)
WO (1) WO2019118040A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7419944B2 (ja) 2020-04-13 2024-01-23 富士通株式会社 半導体装置及び同期化方法
CN111949582B (zh) * 2020-08-25 2022-01-18 海光信息技术股份有限公司 指针同步装置及方法、异步fifo电路、处理器系统
US11967960B2 (en) * 2021-07-30 2024-04-23 Advanced Micro Devices, Inc. Methods and apparatus for synchronizing data transfers across clock domains using heads-up indications
CN116561027A (zh) 2022-01-27 2023-08-08 瑞昱半导体股份有限公司 异步先进先出内存的控制方法及对应的数据传输系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040001014A1 (en) * 2002-06-28 2004-01-01 Ashwani Oberai Method and apparatus for generating gray code for any even count value to enable efficient pointer exchange mechanisms in asynchronous FIFO'S
US7519788B2 (en) * 2004-06-04 2009-04-14 Micron Technology, Inc. System and method for an asynchronous data buffer having buffer write and read pointers
US20090185695A1 (en) * 2007-12-18 2009-07-23 Tandberg Telecom As Method and system for clock drift compensation
US8270552B1 (en) * 2009-02-26 2012-09-18 Maxim Integrated Products, Inc. System and method for transferring data from non-spread clock domain to spread clock domain
US20130205160A1 (en) * 2010-07-28 2013-08-08 Gnodal Limited Synchronizing data transfer between a first clock domain and second clock domain
WO2014135369A1 (en) * 2013-03-05 2014-09-12 St-Ericsson Sa Reduction of cpu current ripple and on-chip variation (ocv) oc clock signal

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9024084D0 (en) * 1990-11-06 1990-12-19 Int Computers Ltd First-in-first-out buffer
US6233629B1 (en) * 1999-02-05 2001-05-15 Broadcom Corporation Self-adjusting elasticity data buffer with preload value
US6738917B2 (en) * 2001-01-03 2004-05-18 Alliance Semiconductor Corporation Low latency synchronization of asynchronous data
US7107393B1 (en) * 2003-03-28 2006-09-12 Xilinx, Inc. Systems and method for transferring data asynchronously between clock domains
US6956776B1 (en) 2004-05-04 2005-10-18 Xilinx, Inc. Almost full, almost empty memory system
US7287105B1 (en) * 2005-01-12 2007-10-23 Advanced Micro Devices, Inc. Asynchronous-mode sync FIFO having automatic lookahead and deterministic tester operation
US8001409B2 (en) * 2007-05-18 2011-08-16 Globalfoundries Inc. Synchronization device and methods thereof
WO2011077574A1 (ja) 2009-12-25 2011-06-30 富士通株式会社 信号復元回路、レイテンシ調整回路、メモリコントローラ、プロセッサ、コンピュータ、信号復元方法及びレイテンシ調整方法
US8995207B2 (en) 2011-08-12 2015-03-31 Qualcomm Incorporated Data storage for voltage domain crossings
US8806118B2 (en) * 2012-11-05 2014-08-12 Sandisk Technologies Inc. Adaptive FIFO

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040001014A1 (en) * 2002-06-28 2004-01-01 Ashwani Oberai Method and apparatus for generating gray code for any even count value to enable efficient pointer exchange mechanisms in asynchronous FIFO'S
US7519788B2 (en) * 2004-06-04 2009-04-14 Micron Technology, Inc. System and method for an asynchronous data buffer having buffer write and read pointers
US20090185695A1 (en) * 2007-12-18 2009-07-23 Tandberg Telecom As Method and system for clock drift compensation
US8270552B1 (en) * 2009-02-26 2012-09-18 Maxim Integrated Products, Inc. System and method for transferring data from non-spread clock domain to spread clock domain
US20130205160A1 (en) * 2010-07-28 2013-08-08 Gnodal Limited Synchronizing data transfer between a first clock domain and second clock domain
WO2014135369A1 (en) * 2013-03-05 2014-09-12 St-Ericsson Sa Reduction of cpu current ripple and on-chip variation (ocv) oc clock signal

Also Published As

Publication number Publication date
CN111512261A (zh) 2020-08-07
US10592442B2 (en) 2020-03-17
EP3724741A4 (en) 2021-10-06
EP3724741A1 (en) 2020-10-21
JP7299890B2 (ja) 2023-06-28
KR102427775B1 (ko) 2022-08-01
JP2021506027A (ja) 2021-02-18
US20190179777A1 (en) 2019-06-13
WO2019118040A1 (en) 2019-06-20

Similar Documents

Publication Publication Date Title
KR102427775B1 (ko) 포인터 오프셋이 있는 비동기식 버퍼
JP5819027B2 (ja) メモリアクセス遅延トレーニングのための方法および装置
EP3105761B1 (en) Memory physical layer interface logic for generating dynamic random access memory (dram) commands with programmable delays
KR100965356B1 (ko) 레이턴시에 둔감한 fifo 시그널링 프로토콜
US8880831B2 (en) Method and apparatus to reduce memory read latency
US8001409B2 (en) Synchronization device and methods thereof
US8930664B2 (en) Method and apparatus for transferring data from a first domain to a second domain
US10025732B2 (en) Preserving deterministic early valid across a clock domain crossing
US9892771B2 (en) Memory controller with dynamic core-transfer latency
US6226698B1 (en) Method and apparatus for dynamically calculating degrees of fullness of a synchronous FIFO
US8559576B2 (en) Adaptive synchronization circuit
Kessels Register-communication between mutually asynchronous domains
US10742216B1 (en) Clock domain crossing for an interface between logic circuits
JP2007272562A (ja) Fifoメモリ
Kaushal et al. Design of synthesizable asynchronous FIFO and implementation on FPGA
KR102226284B1 (ko) 시스템온칩 및 이의 구동 방법
GB2519414A (en) Crossing pipelined data between circuitry in different clock domains

Legal Events

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