KR20080072852A - 스케일링가능하고 프로그램가능한 순환 버퍼에 대한 포인터계산 방법 및 시스템 - Google Patents

스케일링가능하고 프로그램가능한 순환 버퍼에 대한 포인터계산 방법 및 시스템 Download PDF

Info

Publication number
KR20080072852A
KR20080072852A KR1020087011890A KR20087011890A KR20080072852A KR 20080072852 A KR20080072852 A KR 20080072852A KR 1020087011890 A KR1020087011890 A KR 1020087011890A KR 20087011890 A KR20087011890 A KR 20087011890A KR 20080072852 A KR20080072852 A KR 20080072852A
Authority
KR
South Korea
Prior art keywords
pointer position
address
adjusted
length
new
Prior art date
Application number
KR1020087011890A
Other languages
English (en)
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 KR20080072852A publication Critical patent/KR20080072852A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3552Indexed addressing using wraparound, e.g. modulo or circular addressing
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/10Indexing scheme relating to groups G06F5/10 - G06F5/14
    • G06F2205/106Details of pointers, i.e. structure of the address generators

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Complex Calculations (AREA)
  • Information Transfer Systems (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 발명은 통신(예를 들어, CDMA) 시스템에서 다양한 애플리케이션에 대한 디지털 신호들을 프로세싱하는 기술에 관한 것이다. 순환 버퍼 내의 포인터 위치는 순환 버퍼의 길이, 2의 거듭제곱에 정렬된 시작 어드레스, 및 상기 길이만큼 시작 어드레스로부터 이격되어 위치되고 상기 길이보다 큰 2의 거듭제곱보다 작은 마지막 어드레스를 설정함으로써 결정된다. 상기 방법 및 시스템은 순환 버퍼 내의 어드레스에 대한 새로운 포인터 위치, 시작 어드레스와 마지막 어드레스 사이의 비트들의 스트라이드 값, 현재 포인터 위치를 스트라이드 값에 부가함으로써 순환 버퍼 내에 새로운 포인터 위치를 결정한다. 조정된 포인터 위치는 상기 길이를 갖는 새로운 포인터 위치의 산술 연산에 의해 순환 버퍼 내에 있다.

Description

스케일링가능하고 프로그램가능한 순환 버퍼에 대한 포인터 계산 방법 및 시스템{POINTER COMPUTATION METHOD AND SYSTEM FOR A SCALABLE, PROGRAMMABLE CIRCULAR BUFFER}
본 발명은 데이터 프로세싱에 관한 것이다. 특히, 본 발명은 스케일링가능하고 프로그램 가능한 순환 버퍼에 대한 새롭고 개선된 포인터 계산 방법 및 시스템에 관한 것이다.
전자 설비 및 지원 소프트웨어 애플리케이션은 점점 더 신호 프로세싱을 포함한다. 홈 시어터, 컴퓨터 그래픽들, 의료용 영상 및 원거리 통신은 모두 신호 프로세싱 기술에 의존한다. 신호 프로세싱이 복잡하지만 반복적인 알고리즘에서 수학적 계산을 필요로 한다. 많은 애플리케이션들은 실시간 계산을 필요로 하는데, 다시 말해, 신호는 시간의 연속한 함수이며, 이는 산술적 프로세싱을 위해 샘플링되고 디지털로 변환되어야 한다. 따라서, 프로세서는 샘플들이 도달하는 대로 샘플들에 대한 이산 계산들을 실행하는 알고리즘을 실행시켜야 한다. 디지털 신호 프로세서(DSP)의 구조는 이러한 알고리즘들을 조절하도록 최적화된다. 우수한 신호 프로세싱 엔진의 특성은 통상적으로 신속하고 유연한 수학적 계산 유닛, 계산 유닛들 간의 제한없는 데이터 흐름, 계산 유닛에서의 확장된 정확성 및 동적 범위, 듀얼 어드레스 생성기들, 효율적인 프로그램 시퀀싱, 및 손쉬운 프로그래밍을 포함할 수도 있다.
DSP 기술의 하나의 유망한 애플리케이션은 위성 또는 지상 링크를 통해 사용자들 사이에서 음성 및 데이터 통신을 지원하는 코드 분할 다중 액세스(CDMA) 시스템과 같은 통신 시스템들을 포함한다. 다중 액세스 통신 시스템에서 CDMA 기술들의 사용은 "SPREAD SPECTRUM MULTIPLE ACCESS COMMUNICATION SYSTEM USING SATELLITE OR TERRESTRIAL REPEATERS" 라는 명칭의 미국 특허 출원 4,901,307, 및 "SYSTEM AND METHOD FOR GENERATING WAVEFORMS IN A CDMA CELLULAR TELEHANDSET SYSTEM"이라는 명칭의 미국 특허 출원 5,103,459에 개시되어 있는데, 상기 출원은 본 발명의 양수인에게 양도되었다.
CDMA 시스템은 통상적으로 하나 이상의 원거리 통신, 및 스트리밍 비디오 표준들에 적합하게 되도록 설계된다. 하나의 이러한 일세대 표준은 "듀얼 모드 광대역 확산 스펙트럼 셀룰러 시스템을 위한 TIA/EIA/IS-95 터미널-기지국 호환 표준"이며, 이하에서는 IS-95 표준으로 불린다. IS-95 CDMA 시스템은 음성 데이터 및 패킷 데이터를 송신할 수 있다. 패킷 데이터를 더욱 효율적으로 송신할 수 있는 좀 더 새로운 세대의 표준은 "3세대 파트너쉽 프로젝트"(3GPP)로 명명된 컨소시엄에 의해 제공되며, 문서 번호들 3G TS 25.211, 3G TS 25.212, 3G TS 25,213, 및 3G TS 25.214를 포함하는 문서의 세트로 실시되는데, 이들은 공중에 이용가능하다. 3GPP 표준은 이하에서 W-CDMA 표준으로 불린다. 또한, MPGE-1, MPEG-2, MPEG-4, H.263, 및 WMV(윈도우 미디어 비디오)와 같은 비디오 압축 표준은 물론, 이러한 무 선 핸드셋들이 점점 더 사용할 다른 많은 표준들이 존재한다.
많은 애플리케이션에서, 버퍼들이 광범위하게 사용된다. 통상의 타입은 자신을 감싸는 순환 버퍼이며, 그로 인해 비록 물리적으로 버퍼 길이 또는 영역에 의해 분리되지만, 가장 낮은 수의 엔트리가 자신의 가잔 높은 엔트리와 인접하게 개념적으로 또는 논리적으로 위치된다. 순환 버퍼는 버퍼에 대한 직접 액세스를 제공함으로써, 호출 프로그램과의 데이터 복사의 추가 단계 없이, 호출 프로그램이 적소에 출력된 데이터를 구성하게 하거나, 적소에 입력된 데이터를 분석하게 한다. 이러한 직접 액세스를 용이하게 하기 위해, 순환 버퍼는 입력 또는 출력 중 하나를 위한 위치를 버퍼링하기 위한 모든 레퍼런스들이 단일의 연속한 블록의 메모리에 있음을 확신한다. 이는 데이터의 순환이 순환 버퍼 마지막 위치에 다다를 때 분할된 버퍼 공간들을 처리할 필요가 없는 호출 프로그램의 문제를 방지한다. 그 결과, 호출 프로그램은, 애플리케이션이 순환 버퍼에서 직접 동작하는 것을 인식할 필요 없이, 이용가능한 매우 다양한 애플리케이션을 이용할 수도 있다.
순환 버퍼의 일 타입은 2의 거듭제곱에 정렬됨은 물론 2의 거듭제곱의 길이를 갖는 버퍼를 필요로 한다. 이러한 순환 버퍼에서, 포인트 계산은 간단하게 마스킹 단계를 포함한다. 이는 간단한 계산을 제공하는 반면, 2의 거듭제곱인 버퍼 길이에 대한 요구는 이러한 순환 버퍼가 소정의 알고리즘 또는 구현에 의해 이용가능하지 않게 한다.
순환 버퍼의 사용에서, 버퍼의 길이는 시작 위치 및 종료 위치를 포함한다. 많은 애플리케이션의 경우, 시작 위치 및 종료 위치가 결정가능하거나 프로그램 가 능한 것이 바람직할 것이다. 순환 버퍼에 대한 프로그램 가능한 시작 위치 및 종료 위치로 인해, 더욱 다양한 알고리즘 및 프로세스가 순환 버퍼를 사용할 수 있다. 더욱이, 상이한 알고리즘들 및 프로세스들이 변화함에 따라, 순환 버퍼의 동작은 증가된 동작 효율성 및 실용성을 제공하기 위해 변경할 수 있다.
순환 버퍼에서 특정 위치를 어드레싱시, 특정 버퍼 위치를 어드레싱하는 포인터가 버퍼 위치에 대해 상부 또는 하부로 이동할 것이다. 이러한 프로세스는, 바람직하지 않게, 완전히 효율적이지는 않다. 종종, 프로세스가 3개의 가산/감산 연산을 필요로 하는 점에서, 프로세스는 부담스럽다. 제1 연산은 현재 버퍼 포인터에 대한 스트라이드(stride)를 부가함으로써 새로운 버퍼 포인터를 생성하는 것이 요구된다. 제2 연산은, 만일 새로운 포인터가 버퍼 어드레스 범위를 오버플로우하거나 또는 언더플로우하는 지를 결정하기 위해 요구된다. 이어, 제3 연산은, 오버플로우하거나 언더플로우하는 경우 새로운 포인터를 조정하기 위해 요구된다. 이러한 3개의 연산은 완전하게 파이프라이닝된 연산에서 3개의 개별 가산기를 필요로 하거나, 택일적으로 파이프라이닝 가능하지 않은 멀티 사이클 연산이 되도록 순환 어드레싱을 필요로 한다. 만일 이러한 연산의 수를 감소시키는 것이 가능하면, 이러한 연산들이 DSP 및 다른 애플리케이션들 동안 다수 회 발생하기 때문에, 현저한 DSP 개선은 몇몇 가산기들의 영역 및/또는 전력 절약 또는 성능 개선 중 하나로부터 달성될 수 있다.
따라서, 스케일링 가능하고 프로그램 가능한 순환 버퍼들의 부류에서 사용가능한 포인터 계산 방법이 요구되는데, 상기 순환 버퍼들의 부류는 프로그램 가능한 버퍼 길이를 지원한다.
더욱이, 랩 어라운드 조건들을 검출하기 위해 가능하면 수 개의 부가물을 필요로 하고, 일시적인 포인터가 순환 버퍼 경계를 넘는 경우 포인터 값의 조정을 가능하게 하는 스케일링 가능하고 프로그램 가능한 순환 버퍼들의 부류에 대한 포인터 계산 방법이 필요하다.
스케일링 가능하고 프로그램 가능한 순환 버퍼에 대해 포인터 계산 방법 및 시스템을 활용하는 기술들이 개시되는데, 상기 기술들은 개인용 컴퓨터들, 개인용 디지털 보조기들, 무선 핸드셋들, 및 유사한 전자 장치들을 위한 점점 더 강고한 소프트웨어 애플리케이션을 프로세싱함은 물론, 관련된 디지털 프로세서 속도 및 서비스 품질을 증가시키기 위한 디지털 신호 프로세서 명령들의 효율적인 사용 및 디지털 신호 프로세서의 연산을 증진시킨다.
개시된 발명의 일 특징에 따라, 순환 버퍼 포인터 위치를 결정하는 방법 및 시스템이 제공된다. 순환 버퍼 내의 포인터 위치는 순환 버퍼의 길이, 2의 거듭제곱으로 할당된 시작 어드레스, 및 상기 길이만큼 시작 어드레스로부터 이격되어 배치도고 상기 길이보다 큰 2의 거듭제곱보다 작은 마지막 어드레스를 설정함으로써 결정된다. 상기 방법 및 시스템은 순환 버퍼 내의 어드레스에 대한 현재 포인터 위치, 시작 어드레스와 마지막 어드레스 사이의 비트들의 스트라이드 값, 스트라이드 값의 비트들의 수만큼 현재 포인터 위치로부터 시프팅된 순환 버퍼 내의 새로운 포인터 위치를 결정한다. 조정된 포인터 위치는 상기 길이를 갖는 새로운 포인터 위치의 산술 연산에 의해 순환 버퍼 내에 있다. 양의 스트라이드의 경우, 조정된 포인터 위치는, 새로운 포인터 위치가 마지막 어드레스보다 작은 경우, 새로운 포인터 위치가 될 조정된 포인터 위치를 조정함으로써 결정된다. 택일적으로, 새로운 포인터 위치가 마지막 어드레스보다 큰 경우, 새로운 포인터 위치로부터 상기 길이를 감산함으로써 조정된 포인터를 조정한다. 음의 스트라이드의 경우, 조정된 포인터 위치는, 새로운 포인터 위치가 시작 어드레스보다 큰 경우, 새로운 포인터 위치가 될 조정된 포인터 위치를 조정함으로써 설정된다. 택일적으로, 새로운 포인터 위치가 시작 어드레스보다 작은 경우, 새로운 포인터 위치에 상기 길이를 부가함으로써 조정된 포인터를 조정한다.
본 발명의 다양한 특징 및 부가의 새로운 특징은 본 명세서의 설명으로부터 명백할 것이다. 발명의 요약의 의도는 청구된 권리의 포괄적인 설명이 아니라, 주요 대상의 기능의 일부를 간단히 살펴보는 것이다. 다른 시스템들, 방법들, 특징들 및 장점들이 이하의 도면 및 실시예의 설명으로 기술 분야의 당업자에게 명백할 것이다. 설명에 포함된 모든 이러한 부가의 시스템들, 방법들, 특징들 및 장점들은 첨부한 청구항의 사상 내에 있다.
본 발명의 특징, 특성 및 장점들은 첨부한 도면과 관련한 설명으로부터 더욱 명확하게 될 것이며, 상기 도면에서 동일한 참조 번호는 동일한 구성 요소에 대응한다.
도1은 본 발명을 구현하는 통신 시스템의 간략한 블록도이다.
도2는 본 발명의 실시예의 교지를 설명하는 DSP 구조를 설명한다.
도3은 개시된 실시예를 설명하는 파이프라인에서 제어 유닛, 데이터 유닛 및 다른 디지털 신호 프로세서 기능 유닛의 평면도이다.
도4는 청구된 발명을 실시하기 위해 어드레스 생성 유닛을 포함하는 개시된 실시예에 대해 분할하는 대표적인 데이터 유닛을 도시한다.
도5는 개시된 실시예의 교지를 이용하는 순환 버퍼의 연산을 개념적으로 도시한다.
도6은 개시된 실시예의 일 구현을 위해 어드레싱 모드, 오프셋 선택 및 유효 어드레스 선택 옵션을 나타내는 테이블이다.
도7은 개시된 실시예에 따른 스케일링가능하고 프로그램 가능한 순환 버퍼에 대한 포인터 계산 방법 및 시스템이다.
도8은 관련된 DSP의 실행 파이프라인 내에서 동작하는 개시된 실시예를 도시한다.
멀티스레드 디지털 신호 프로세서에 대한 스케일링가능하고 프로그램 가능한 순환 버퍼에 대한 새롭고 향상된 포인터 계산 방법 및 시스템에 대한 개시된 실시예는 멀티스레드 프로세싱을 포함하는 매우 다양한 디지털 신호 프로세싱 애플리케이션들의 애플리케이션을 갖는다. 하나의 이러한 애플리케이션은 통신에서, 특히 하나 이상의 디지털 신호 프로세싱 회로들을 포함하는 무선 핸드셋들에서 나타난다. 따라서, 도1은 제공된 실시예를 구현할 수 있는 통신 시스템(10)의 간략화된 블록도를 제공한다. 송신기 유닛(12)에서, 데이터는 데이터 소스(14)로부터, 하나 이상의 아날로그 신호를 생성하기 위해 데이터를 포맷팅, 코딩 및 프로세싱하는 송신(TX) 데이터 프로세서(16)로 통상적으로 세트로 전송된다. 이어, 아날로그 신호는 변조된 신호를 생성하기 위해 기저대역 신호들을 변조, 필터링, 증폭 및 상향 변환하는 송신기(TMTR)에 제공된다. 변조된 신호는 이어 하나 이상의 수신기 유닛으로 안테나(20)를 통해 송신된다.
수신기 유닛(22)에서, 송신된 신호는 안테나(24)에 의해 수신되고, 수신기(RCVR)(26)로 제공된다. 수신기(26) 내에서, 수신된 신호는 증폭, 필터링, 하향 변환, 복조, 및 디지털화되어 동위상(I) 및 (Q) 샘플들을 생성한다. 이어 샘플들은 송신된 데이터를 복구하기 위해 수신(RX) 데이터 프로세서(28)에 의해 디코딩 및 프로세싱된다. 수신기 유닛(22)에서 디코딩 및 프로세싱은 송신기 유닛(12)에서 실행된 코딩 및 프로세싱에 상보적인 방식으로 실행된다. 이어 복구된 데이터는 데이터 싱크(30)로 제공된다.
전술한 신호 프로세싱은 음성, 비디오, 패킷 데이터, 메시징, 및 다른 타입의 통신의 일방향으로의 송신을 지원한다. 양방향 통신 시스템은 두 방향 데이터 송신을 지원한다. 그러나, 다른 방향에 대한 신호 프로세싱은 간략화를 위해 도1에 도시되지 않는다. 통신 시스템(10)은 코드 분할 다중 접속(CDMA) 시스템, 시분할 다중 접속(TDMA) 통신 시스템(예를 들어, GSM 시스템), 주파수 분할 다중 접속(FDMA) 통신 시스템, 또는 지상 링크를 통해 사용자들 사이에서 음성 및 데이터 통신을 지원하는 다른 다중 접속 통신 시스템일 수 있다. 특정 실시예에서, 통신 시스템(10)은 W-CDMA 표준에 부합하는 CDMA 시스템이다.
도2는 도1의 송신 데이터 프로세서(16) 및 수신 데이터 프로세서(28)로서 작용할 수도 있는 DSP(40) 구조를 도시한다. DSP(40)가 본 명세서에 개시된 교지 및 개념을 효율적으로 이용할 수 있는 매우 다양한 디지털 신호 프로세서 실시예들 중 일 실시예만을 나타내고 있음을 이해해야 한다. 따라서, DSP(40)에서, 스레드들(T0 내지 T5)("T0:T5")은 상이한 스레드들로부터의 명령의 세트를 포함한다. 명령 유닛(IU)(42)은 스레드들(T0:T5)에 대한 명령을 인출한다. IU(42)는 명령들(I0 내지 I3("I0:I3"))을 명령 큐(IQ)(44)로 큐잉한다. IQ(44)는 명려들(I0:I3)을 프로세서 파이프라인(46)으로 제공한다. 프로세서 파이프라인(46)은 은 제어 회로는 물론 데이터 경로를 포함한다. IQ(44)로부터, 단일 스레드, 예를 들어, 스레드(T0)는 디코딩 및 이슈 회로(48)에 의해 선택될 수도 있다. 파이프라인 로직 제어 유닛(PLC)(50)은 디코딩 및 이슈 회로(48) 및 IU(42)에 로직 제어를 제공한다.
IU(42)에서 IQ(44)는 명령 스트림의 슬라이딩 버퍼를 유지한다. DSP(40)가 지원하는 6개의 스레드들(T0:T5) 각각은 개별적인 8개의 엔트리 IQ(44)를 갖는데, 여기서 각각의 엔트리는 하나의 VLIW 패킷 또는 4개까지의 개별 명령들을 저장할 수도 있다. 디코딩 및 이슈 회로(48)는 한 번에 VLIW 패킷 또는 두 개까지의 수퍼스칼라 명령을 디코딩 및 이슈하기 위해, 또한 각각의 파이프라인 슬롯0:슬롯3에 대한 제어 버스들 및 연산자들을 생성하기 위해, 모든 스레드에 의해 공유된다. 게다가, 디코딩 및 이슈 회로(48)는, 예를 들어, 수퍼스칼라 이슈 기술을 을 이용하여, 명령 이슈에 대한 IQ(44) 엔트리에서 두 개의 가장 오래된 유효 명령 사이에 서 슬롯 할당 및 의존성 체크를 실행한다. PLC(50) 로직은 예외들을 해결하고, 스레드 이네이블/디스에이블, 응답 조건들과 같은 파이프라인 스톨(stall) 조건들을 검출하기 위해 모든 스레드에 의해 공유된다.
연산에서, 선택된 스레드의 범용 레지스터 파일(GRF)(52) 및 제어 레지스터 파일(CRF)(54)이 판독되며, 판독된 데이터는 슬롯0:슬롯3에 대한 실행 데이터 경로들로 전송된다. 이러한 예에서, 슬롯0:슬롯3는 본 실시예에서 사용된 조합을 그룹화하는 패킷을 제공한다. 슬롯0: 슬롯3으로부터의 출력은 결과를 DSP(40)의 연산으로부터 리턴한다.
따라서, 본 발명의 실시예는 6개까지의 스레드들(T0:T5)을 갖는 단일 마이크로 프로세서를 이용하는 혼성의 이종 엘리먼트 프로세서(HEP) 시스템을 사용할 수도 있다. 프로세서 파이프라인(46)은 IU(42)로부터 데이터를 인출하기 위해 필요한 프로세서 사이클들의 최소수에 부합하는 6개의 파이프라인 스테이지를 갖는다. DSP(40)는 프로세서 파이프라인(46) 내에서 상이한 스레드들(T0:T5)의 명령을 동시에 실행한다. 즉, DSP(40)는 6개의 독립 프로그램 카운터, 프로세서 파이프라인(46) 내에서 스레드(T0:T5)의 명령들을 구분하기 위한 내부 태깅 메카니즘, 및 스레드 스위치를 트리거하는 메카니즘을 제공한다. 스레드 스위치 오버헤드는 제로로부터 단지 몇몇 사이클로 변화한다.
도3은 개시된 실시예의 하나의 표시에 대해 DSP(40) 마이크로 구조의 간략한 개관을 제공한다. DSP(40) 마이크로 구조의 구현은 인터리빙된 멀티스레딩(IMT)을 지원한다. 개시된 실시예는 단일 스레드의 실행 모델을 다룬다. IMT의 소프트웨 어 모델은 공유된 메모리 멀티프로세서로서 간주될 수 있다. 단일 스레드는 이용가능한 모든 레지스터들 및 명령들을 갖는 완전한 단일 프로세서 DSP(40)를 조사한다. 코히어런트 공유 메모리 설비를 통해, 이러한 스레드는 다른 스레드들과 통신 및 동기화할 수 있다. 이러한 다른 스레드들이 동일한 프로세서 또는 다른 프로세서 상에서 실행하는 지는 사용자 레벨 소프트웨어에 대부분 투명하다.
도3을 다시 참조하면, DSP(40)에 대한 본 발명의 마이크로 구조(60)는 프로세서 파이프라인(46)에 대한 대부분의 제어 기능을 실행하는, 제어 유닛(CU)(62)을 포함한다. CU(62)는 스레드들을 스케줄링하고 IU(42)로부터 혼합된 16 비트 및 32 비트 명령들을 요청한다. 더욱이 CU(62)는 3개의 실행 유닛, 시프트-타입 유닛(SU)(64), 곱셈 타입 유닛(MU)(66), 및 부하/저장 유닛(DU)(68)으로 명령들을 스케줄링 및 제공한다. CU(62)는 또한 스칼라 의존 체크들을 실행한다. 버스 인터페이스 유닛(BIU)(70)은 IU(42) 및 DU(68)를 시스템 버스(미도시)에 인터페이스한다.
슬롯0 및 슬롯1 파이프라인은 DU(68)에 있으며, 슬롯2는 MU(66)에 있으며, 슬롯3은 SU(64)에 있다. CU(62)는 소스 연산자들 및 제어 버스들을 파이프라인들(슬롯0:슬롯3)에 제공하며, GRF(52) 및 CRF(54) 파일 업데이트들을 조절한다. GRF(52)는 단일 레지스터들로서 또는 할당된 64비트 쌍들로서 액세스될 수 있는 32비트 레지스터들을 유지한다. 마이크로구조(60)는 수퍼스칼라 및 VLIW 실행의 장점을 혼합하는 혼성 실행 모델을 특징짓는다. 수퍼스칼라 이슈는 어떠한 소프트웨어 정보도 독립적 명령들을 찾기 위해 요구되지 않는다는 장점을 갖는다. 디코딩 스테이지(DE)는 DSP(40)에서 추가의 프로세싱 및 실행을 위해 명령들을 준비하도록 이러한 명령들의 초기 디코딩을 실행한다. 레지스터 파일 파이프라인 스테이지(RF)는 레지스트리 파일 업데이팅을 제공한다. 두 개의 실행 파이프라인 스테이지들(EX1 및 EX2)은 명령 실행을 지원하며, 제3 실행 파이프라인 스테이지(EX3)는 명령 실행 및 레지스터 파일 업데이트를 제공한다. 실행 동안, (EX1, EX2 및 EX3) 및 라이트백(WB) 파이프라인 스테이지(IU(42))는 실행될 다음 IQ(44)를 구축한다. 끝으로, 라이트백(WB) 파이프라인 스테이지는 레지스터 업데이트를 실행한다. 레지스터 파일 연산에 대한 스태거링된 기록은 IMT 마이크로 구조로 인해 가능하며, 스레드달 기록 포트들의 수를 저장한다. 파이프라인들이 6개의 스테이지를 갖기 때문에, CU(52)는 6개까지의 상이한 스레드를 제공할 수도 있다.
도4는 본 발명의 실시예에 적용할 수도 있는 대표적인 데이터 유닛(DU(68)) 블록 분할을 나타낸다. DU(68)는 어드레스 생성 유닛(AGU(80))을 포함하는데, AGU(80)는 CU(62)로부터의 입력을 수신하기 위해 AGU0(81) 및 AGU1(83)을 더 포함한다. 개시된 실시예는 AGU(80)의 연산을 이용하는 주요한 애플리케이션을 갖는다. 부하/저장 제어 유닛(LCU(82))은 또한 CU(62)와 통신하며 제어 신호를 AGU(80) 및 ALU(84)로 제공하고, 또한 데이터 캐시 유닛(86)과 통신한다. ALU(84)는 또한 AGU(80) 및 CU(62)로부터 입력을 수신한다. AGU(80)로부터의 출력은 DCU(86)로 진행한다. DCU(86)는 메모리 관리 유닛("MMU")(87) 및 CU(62)와 통신한다. DCU(86)는 SRAM 상태 어레이 회로(88), 저장 정렬기 회로(90), CAM 태그 어레이(92), SRAM 데이터 어레이(94), 및 부하 정렬기 회로(96)를 포함한다.
청구된 실시예가 동작할 수도 있는, DU(86)의 연산을 추가로 설명하기 위해, 이하의 설명의 몇몇 부분들에 따라 실행된 기본 기능이 참조된다. 특히, DU(68)는 ALU(84)로부터의 32비트 명령들 저장 타입 및 부하 타입을 실행한다. DU(86)의 주요한 특징들은 슬롯0 및 슬롯1의 두 평행한 파이프라인들을 이용하여, DSP(40) 파이프라인 스테이지들, DE, RF, EX1, EX2, EX3 및 WB 파이프라인 스테이지들 모두에서 완전한 파이프라이닝된 연산을 포함한다. DU(68)는 VLIW 또는 수퍼스칼라 듀얼 명령 이슈 중 하나를 수용할 수도 있다. 바람직하게, 슬롯0은 캐시 불가능하거나 캐시 가능한 부하 또는 저장 명령들, 32비트 ALU(84) 명령들, 및 DCU(86) 명령들을 실행한다. 슬롯1은 캐시 불가능하거나 캐시 가능한 부하 명령들 및 32비트 ALU(84) 명령들을 실행한다.
DU(68)는 즉시 연산자를 포함하는 DE 파이프라인 스테이지에서 CU(60)로부터 사이클당 두 개까지의 디코딩된 명령을 수신한다. RF 파이프라인 스테이지에서, DU(68)는 적절한 스레드 특정 레지스터들로부터 범용 레지스터(GPR) 및/또는 제어 레지스터(CR) 소스 연산자를 수신한다. GPR 연산자는 CU(60)에서 GPR 레지스터 파일로부터 수신된다. EX1 파이프라인 스테이지에서, DU(68)는 부하 또는 저장 메모리 명령의 유효 어드레스(EA)를 생성한다. EA는 MMU(87)에 제공되며, 이는 페이지 레벨 허용 체크 및 물리적 어드레스 번역에 대한 가상 어드레스 번역을 실행하며, 페이지 레벨 속성들을 제공한다. 캐시 가능한 위치들에 대한 액세스를 위해, DU(68)는 물리적 어드레스를 갖는 EX2 파이프라인 스테이지에서 데이터 캐시 태그를 조사한다. 만일 액세스가 히트하면, DU(68)는 EX3 파이프라인 스테이지에서 데 이터 어레이 액세스를 실행한다.
캐시 가능한 부하들의 경우, 캐시로부터 판독된 데이터는 적절한 액세스 크기로 정렬되고, 특정된 대로 제로/부호 확장되며, 명령 특정된 GPR로 기록될 WB 파이프라인 스테이지에서 CU(60)로 제공된다. 캐시 가능한 저장들에서, 저장될 데이터는 EX1 파이프라인 스테이지에서 CU(60)에서 스레드 특정 레지스터로부터 판독되고 EX2 파이프라인 스테이지에서 히트에 대해 데이터 캐시 어레이로 기록된다. 부하들 및 저장들의 경우, 자동 증가된 어드레스들은 EX1 및 EX2 파이프라인 스테이지들에서 생성되며, 명령 특정된 GPR로 기록될 EX3 파이프라인 스테이지에서 CU(60)로 제공된다.
DU(68)는 DCU(86)를관리하는 캐시 명령들을 또한 실행한다. 명령들은 특정 캐시 라인들이 록킹 및 언록킹되고, 무효화되고 GPR 특정 캐시 라인으로 할당되게 한다. 캐시를 전역에서 무효화하기 위한 명령이 또한 존재한다. 이러한 명령들은 부하 및 저장 명령들과 유사하게 파이프라이닝된다. 데이터 캐시를 누락시키는 캐시 가능한 위치들에 대한 부하들 및 저장들의 경우, 그리고 캐시 불가능한 액세스들의 경우, DU(68)는 BIU(70)에 대한 요청들을 제공한다. 캐시 불가능한 부하들은 판독 요청을 제공한다. 저장 히트들, 누락들 및 캐시 불가능한 저장들은 기록 요청을 제공한다. DU(68)은 BIU(70)에 대한 현재 판독(outstanding read) 및 라인 채움 요청들을 추적한다. DU(68)는 스레드간 비블로킹을 제공하는데, 즉 현재 부하 요청의 완료 진행 중인 하나 이상의 스레드가 블록킹되는 반면, 다른 스레드들에 의한 액세스를 허용한다.
본 발명의 실시예가 속하는 AGU(80)는 AGU(80) 데이터 경로의 두 개의 동일한 인스턴스를 제공하는데, 하나는 슬롯0에 대한 것이고 하나는 슬롯1에 대한 것이다. 그러나 개시된 실시예는 ALU(84)와 같은 U(68)의 다른 블록들에서, 동작하고 실제로 존재 및 동작한다. 그러나 실시예의 기능 및 구성을 이해하기 위한 설명의 목적으로, 개시된 예에 따라, 각각의 슬롯에 대해 유효 어드레스(EA) 및 자동 증가 어드레스(AIA) 모두를 생성하는 AGU(80)에 대해 설명한다.
LCU(82)는 캐시 히트, 캐시 미스들, 캐시 불가능한 부하들 및 저장 명령들을 포함할 수도 있는 부하 및 저장 명령 실행들을 이네이블한다. 본 발명의 실시예에서, 부하 파이프라인은 슬롯0 및 슬롯1과 동일하다. LCU(82)를 통한 저장 실행은 캐시 히트 명령들, 라이트백 캐시 히트 명령, 캐시 미스 명령, 캐시 불가능 기록 명령들을 통해 저장 명령 파이프라인 기록을 제공한다. 저장 명령들은 본 발명의 실시예로 슬롯0에 대해서만 실행한다. 라이트-스루 저장시, 기록 요청은 히트 조건에 무관하게 BIU(70)으로 제공된다. 라이트-백 저장시, 기록 요청은 미스가 존재하는 경우, 및 히트가 존재하지 않는 경우 BIU(70)으로 제공된다. 라이트백 저장 히트시, 캐시 라인 상태는 업데이트된다. 저장 미스는 BIU(70)에 대해 기록 요청을 제공하고 캐시에서 라인을 할당하지 않는다.
ALU(84)는 ALU0(85) 및 ALU1(89)를 포함하는데, 각각의 슬롯에 대해 하나이다. ALU(84)는 DU(68) 내에서 산술/전달/비교(ATC) 연산들을 실행하기 위한 데이터 경로를 포함한다. 이들은 32비트 가산, 감산, 부정, 비교, 레지스터 전달, 및 MUX 레지스터 명령들을 포함할 수도 있다. 게다가, ALU(84)는 또한 AIA 계산을 위 해 순환 어드레싱을 완료한다.
도5는 개시된 실시예의 교지를 이용하는 순환 버퍼의 연산을 개념적으로 도시한다. 다수의 실행 스레드들이 DSP(40) 상에서 병렬로 실행하도록 스케줄될 때, 이들은 자신들의 개별 루프 실행 시간들에서 지터를 증가시키는 방식으로 상호작용할 수도 있다. AGU(80)가 많은 양의 데이터를 LCU(82)로 전송해야할 때, 기술들은 결정성 데이터 스트리밍을 구현한다. 데이터 손실을 피하기 위해, LCU(82)는 준비되는 대로 데이터를 검색함으로써 획득 컴포넌트와 접속을 유지할 수 있어야 한다.
도5를 참조하면, 다수의 섹션으로 버퍼 메모리를 할당하는 순환 버퍼(100)가 도시된다. 연산시, AGU(80)는 섹션, 예를 들어, 순환 버퍼(100)의 섹션(102)을 채우는 반면, LUC(82)는 다른 섹션, 예를 들어 섹션(104)으로부터 가능하면 신속하게 데이터를 판독한다. 순환 버퍼(100)는 LCU(82) 및 AGU(80)이 버퍼에서 동시에 데이터를 액세스하게 하는데, 이는 소정의 시간에 이들이 상이한 버퍼 섹션들에서 데이터를 기록하고 판독하기 때문이다. 따라서, 순환 버퍼(100)는 예를 들어, 섹션(104)으로부터 판독하면서 섹션(102)의 시작에서 기록을 계속한다. AGU(80)의 일 책임은 데이터가 덮어쓰기 되지 않도록 AGU(80)을 유지하는 것이다. 새로운 데이터가 이용가능할 때, 동기화 메카니즘은 AGU(80)가 LCU(82)에게 통지하게 한다.
도6은 개시된 실시예의 일 구현에 대한 유효 어드레스 선택 옵션들, 오프셋 선택들, 및 어드레싱 모드들을 나타내는 테이블(106)을 제공한다. 따라서, 도6의 테이블은 DU(68)에 의해 실행된 명령들을 위한 주요한 명령 디코딩들을 리스트한다. 디코딩 기능의 대부분은 CU(60)에 존재하며, 디코딩된 신호들은 디코딩된 명령 전달의 일부로서 DU(68)로 제공된다. 따라서, 자동 증가 없는 간접 및 스택 포인터 관련 어드레싱 모드들은 Imm 오프셋 MUX 선택 및 Add EA MUX 선택을 사용한다. 자동 증가 레지스터를 갖는 간접 및 자동 증가 레지스터 갖는 순환 어드레싱 모드들은 M 오프셋 MUX 선택 및 RF EA MUX 선택을 사용한다. 자동 증가 레지스터를 갖는 간접 및 자동 증가 레지스터를 갖는 순환 어드레싱 모드들은 M 오프셋 MUX 선택 및 RF EA MUX 선택을 사용한다. 끝으로, 자동 증가 레지스터를 갖는 비트 반전된 어드레싱 모드는 M 오프셋 MUX 선택 및 BRev, 또는 비트 반전된, EA MUX 선택을 사용한다. 개시된 다양한 디코딩 기능들을 실행할 때, 본 발명의 방법 및 시스템은 설명된 바와 같이 이하의 포인터 위치 계산 연산들을 실행할 수도 있다.
도7은 알고리즘 프로세스를 위한 한정을 설정한 본 발명의 일 실시예의 특징을 나타낸다. 이러한 한정에서, M은 정수이며 M 비트 가산기를 의미하며, N은 0보다 크고 M보다 작은 정수, 즉 0 < N < M이라고 하자. N은 0 < N < M 내에서 스케일링가능하고 프로그램가능하다고 가정한다. 또한, M비트 가산기에 대한 참조로서 M을 설정한다. 순환 버퍼(100)는 2N 정렬된 베이스 포인터로서 형성될 수도 있으며, 프로그램 가능한 길이(L)을 갖는데, 여기서 L < 2N이다.
이러한 한정으로, 도7에 대해 참조가 행해지며, 도7은 스케일링가능하고 프로그램가능한 순환 버퍼에 대해 현재 포인터 계산 방법 및 시스템을 실행하기 위해 개략적인 블록도(110)를 제공한다. 블록도(110)는 입력으로서 112에서 현재 포인터(R), 114에서 베이스 마스트 생성기 입력, 116에서 스트라이드 입력, 및 118에서 스트라이드 방향(양의 방향에 대해 0 또는 음의 방향에 대해 1)을 포함한다. 현재 포인터 입력(R)은 AND 게이트들(120 및 122)로 진행한다. 베이스 마스크 생성기 입력(114)은 AND 게이트(122) 및 인버터(124)로 진행하는데, 이는 AND 게이트(120)에 대해 오프 마스크를 제공한다. N의 값에 기초하여, 베이스 마스크 생성기(114)는 비트 N-1:0에 대한 마스크를 생성한다. 즉, 비트 BM -1:BN은 모두 제로로 설정될 수 있는 반면, 비트 BN -1:B0는 모두 1로 설정될 수도 있다. AND 게이트(122)로부터의 출력은 M-비트 가산기(126)에 대한 포인터 오프셋을 제공한다.
스트라이드 입력(116)은 MUX(128), 및 반전된 입력을 MUX(128)로 제공하는 인버터(130)로 진행한다. 스트라이드 방향 입력(118)은 또한 MUX(128), M-비트 가산기(126), MUX(132) 및 인버터(134)로 진행한다. AND 게이트(122)는 현재 포인터 입력(112)과 베이스 마스크 생성기(114)로부터의 베이스 마스크의 비트와이즈 AND로서 포인터 오프셋을 도출한다. AND 게이트(120)는 현재 포인터(112)와 인버터(124)로부터의 오프셋 마스크의 논리적 AND로부터 포인터 베이스(136)를 도출하는데, 오프셋 마스크는 베이스 마스크 생성기(114)로부터의 반전된 출력이다.
M 비트 가산기(216)는 M 비트 가산기(140)를 위한 피가수(summand)를 생성한다. 피가수는 AND 게이트(122)로부터의 포인터 오프셋, MUX(128)로부터의 멀티플렉싱된 출력, 및 스트라이드 방향(118) 입력의 합에서 도출된다. M 비트 가산 기(140)는 피가수(138), MUX(132)로부터의 멀티플렉싱된 출력, 및 인버터(134)로부터 합을 도출한다. 합(142)은 피가수(138)±순환 버퍼 길이와 같다. 순환 버퍼 길이는 인버터(146) 및 길이 입력(148)으로부터의 입력들에 응답하여 MUX(132)로부터 도출된다. 합(142), 피가수(138), 및 M 비트 가산기(140)로부터의 최상위 비트 M(144)는 새로운 포인터 오프셋(152)을 도출하기 위해 MUX(150)로 제공된다. 끝으로, OR 게이트(154)는 원하는 새로운 포인터(156)를 도출하기 위해 MUX(150)로부터의 멀티플렉싱된 출력 및 포인터 베이스(136)를 이용하여 논리적 OR 연산을 실행한다.
알려진 방법을 통한 개시된 프로세스의 명백한 장점은 단지 두 개의 가산기, 즉 M 비트 가산기(126 및 140)를 필요로 한다. 또한, 개시된 프로세스 및 시스템은 순환 버퍼들의 집단을 도출하기 위해 N 및 M을 변화시키는 것을 허용한다. 이와 같이, 개시된 실시예는 전력, 속도, 및 영역 설계 고려 사항들에 대한 설계 최적화를 위해 제공된다. 더욱이, 본 발명의 프로세스 및 시스템은 부호 있는 오프셋 및 프로그램 가능한 순환 버퍼 길이들을 지원한다. 본 발명의 실시예의 또 다른 특징은 요구되는 매개 비트 올림 항들의 필요 없이 단지 일반 M 비트 가산기들을 필요로 한다는 것이다. 게다가 개시된 실시예는 양 및 음의 스트라이드 모두에 대해 동일한 데이터 경로를 이용할 수도 있다.
본 발명의 효과를 설명하기 위해, 이하의 예가 제공된다. N=5, L=30(즉, B011110)이라고 하고, M=N+1=6이라고 한다. 현재 포인터(P), 현재 스트라이드(S), 스트라이드의 부호(D)라고 하며, 이들 모두는 이하의 예에서 변수들이다. 개시된 프로세스 예들의 결과는 순환 버퍼(100) 내에서 다양한 새로운 포인터 위치들을 제공한다.
첫 번째 예에서, P=62(B111110), S=1(B000001), 및 D=양(B0)(오버플로우의 경우)이다. 이러한 경우, 베이스 마스크 생성기(114)로부터의 마스크는 011111이며, AND 게이트(120)로부터의 포인터 오프셋은 011110이며, AND 게이트(120)로부터의 포인터 베이스(136)는 100000 이다. M 비트 가산기(126)로부터의 피가수(138)는 011110+000001=011111 이다. 합(142)은 011111+100001+000001=000001 이 된다. 새로운 포인터 오프셋은 합(142)에 대해 0이 되는 비트6에 기초하여 결정된다. 이는 새로운 포인터 오프셋으로서, 000001인 합(142)의 선택을 초래한다. 따라서 새로운 포인터는 000001+100000=100001 이다.
두 번째 예에서, P=62(B111110), S=1(B000001), 및 D=음(B1)이라고 하자. 이 경우, 베이스 마스크 생성기(114)로부터의 마스크는 011111 이며, AND 게이트(122)로부터의 포인터 오프셋은 011110 이며, AND 게이트(120)로부터의 포인터 베이스(136)는 100000 이다. M 비트 가산기(126)로부터의 피가수(138)는 011110+111110+000001=011101 이다. 합(142)은 011101+011110=111011 이 된다. 새로운 포인터 오프셋은 합(142)에 대해 1이 되는 비트6에 기초하여 결정된다. 이는 새로운 포인터 오프셋으로서, 011101인 피가수(138)의 선택을 초래한다. 따라서, 새로운 포인터는 011101+100000=111101 이 된다.
세 번째 예에서, P=33(B100001), S=1(B000001), 및 D=양(B0)이라고 하자. 이 경우, 베이스 마스크 생성기(114)로부터의 마스크는 011111 이며, AND 게이 트(122)로부터의 포인터 오프셋은 000001 이며, AND 게이트(120)로부터의 포인터 베이스(136)는 100000 이다. M 비트 가산기(126)로부터의 피가수(138)는 000001+000001+000010=011101 이다. 합(142)은 000010+100001=100100 이 된다. 새로운 포인터 오프셋은 피가수(138)에 대해 1이 되는 비트6에 기초하여 결정된다. 이는 새로운 포인터 오프셋으로서, 000010인 피가수(138)의 선택을 초래한다. 따라서, 새로운 포인터는 000010+100000=100010 이 된다.
네 번째 예에서, P=33(B100001), S=1(B000001), 및 D=음(B1)이라고 하며, 이는 언더플로우의 경우이다. 이 경우, 베이스 마스크 생성기(114)로부터의 마스크는 011111 이며, AND 게이트(122)로부터의 포인터 오프셋은 000001 이며, AND 게이트(120)로부터의 포인터 베이스(136)는 100000 이다. M 비트 가산기(126)로부터의 피가수(138)는 000001+111110+000010=011101 이다. 합(142)은 000000+011110=011110 이 된다. 새로운 포인터 오프셋은 합(142)에 대해 1인 비트6에 기초하여 결정된다. 이는 새로운 포인터 오프셋으로서, 011110인 합(142)의 선택을 초래한다. 따라서, 새로운 포인터는 011101+100000=111110 이 된다.
따라서, 개시된 실시예는 스케일링가능하고 프로그램 가능한 순환 버퍼(100)에 대한 포인터 계산 방법 및 시스템을 제공하는데, 여기서 순환 버퍼(100)의 시작 위치는 순환 버퍼(100)의 크기에 대응하는 2의 거듭제곱에 정렬된다. 개별 레지스터는 순환 버퍼(100)의 길이를 포함한다. 순환 버퍼(100)의 베이스를 정렬함으로써, 개시된 실시예는 포인터 위치를 달성하기 위해 감산 연산만을 필요로 한다. 이러한 프로세스로 인해, 개시된 바와 같이, 두 개의 M 비트 가산기를 이용한 단지 두 개의 합이 필요하다. 본 발명의 방식은 다수의 상이한 전력, 속도 및 영역 메트릭에 대해 순환 버퍼들(100)의 최적 집단을 도출하기 위해 N 및 M을 변화시키는 것을 허용한다. 본 발명의 방법 및 시스템은 부호 있는 오프셋 및 프로그램 가능한 길이를 지원한다. 게다가, 개시된 실시예는 매개 비트 올림 항들을 없는 일반적인 M 비트 가산기들만을 필요로 하며, 양 및 음의 스트라이드들 모두에 대해 동일한 데이터 경로를 이용한다.
본 발명의 방법 및 시스템은 시작 위치(S)를 갖는데, 이는 버퍼 길이(L)를 포함할 수 있는 메모리 크기에 대응하는 2의 거듭제곱에 정렬된다. 버퍼 길이(L)는 DU(68)에 상태로서 저장될 필요가 있거나 그렇지 않을 수도 있다. 프로세스는 다수의 비트(B)를 취하는데, 이는 L 보다 큰 2의 거듭제곱이다. 베이스와 베이스+L 사이에 속하는 포인터(R)가 취해진다. 따라서, 프로세스는 컴퓨터 명령을 이용하며, 변경된 포인터(R')를 도출하기 위해 상수를 부가 또는 감산함으로써 원래의 포인터(R)를 변경시킨다. 이어, 시작 위치(S)는 B 비트들의 최하위 비트(LSB)를 0으로 설정함으로써 조정된다. 이어 프로세스는 S 및 L의 논리적 OR을 취함으로써, 마지막 위치(E)를 결정한다. 만일 변경된 포인터(R')가 상수를 부가함으로써 도출되면, 프로세스는 변경된 포인터(R')로부터 마지막 위치를 감산하여 새로운 오프셋 위치(O)를 도출한다. 만일 오프셋 위치(O)가 양이면, 최종 결과는 결정된 시작 위치(S)의 논리적 OR, 및 도출된 오프셋 위치(O)를 취함으로써 도출된다. 만일 변경된 포인터(R')가 상수를 감산함으로써 도출되면, 프로세스는 마지막 위치(E)로부터 변경된 포인터(R')를 감산하여 새로운 오프셋 위치(O)를 도출한다. 만일 변경된 포인터(R')의 값(B+1)에 대응하는 비트가 원래의 포인터(R)의 값(B+1)에 대응하는 비트와 동일하지 않으면, 최종 결과는 새로운 시작 위치(S)의 논리적 OR, 및 새로운 포인터 위치(R')를 설정하기 위한 새로운 오프셋(O)이다. 그렇지 않으면, 새로운 오프셋(O)은 변경된 포인터 위치(R')를 결정한다.
개시된 실시예의 변경은, 비트들의 수의 길이를 인코딩하는 것을 대신하여 마지막 어드레스(E)의 인코딩을 포함한다. 이는, 순환 버퍼 계산의 크기 및 복잡성을 감소시키면서, 임의의 크기의 순환 버퍼를 허용할 수도 있다.
본 발명의 또 다른 애플리케이션을 설명하기 위해, 도8은, 하나는 슬롯0에 대해 그리고 하나는 슬롯1에 대한, 어드레스 생성 데이터 경로의 두 개의 동일한 예를 제공하는 AGU(80) 포인터로서 DSP(40)에서 사용하기 위한 개시된 본 발명의 실시예를 제공한다. AGU(80)는 각각의 슬롯에 대해 유효 어드레스(EA) 및 자동 증가 어드레스(AIA)를 생성한다. EA 생성은 어드레싱 모드에 기초하며, (a) 레지스터 모드, (b) 즉시 오프셋과 함께 부가된 레지스터 모드, 및 (c) 비트 반전 모드에서 계산된 수도 있다. 도8에 나타난 데이터 경로는 이하에 설명된 최종 3:1 EA 멀티플렉서를 이용한 각 방법을 도시한다.
따라서, 도8을 참조하면, 어드레스 생성 프로세스(160)가 도시된다. 어드레스 생성 프로세스(160)에서, CU(60)로부터 AGU(80)로의 즉시 오프셋 입력은 최대 시프팅된 즉시 오프셋 폭(19 비트)으로 확장된 부호/제로인 것으로 예상된다. AGU(80) 부호/제로는 오프셋을 32비트로 확장한다.
도8의 실시예는 또한 어드레싱 모드에 기초하여 자동 증가 어드레스 생성 프 로세스를 제공한다. 자동 증가 어드레스 생성 프로세스는 (a) 즉시 오프셋 모드와 함께 부가된 레지스터, (b) M 레지스터 오프셋 모드와 함께 부가된 레지스터, 및 (c) 즉시 오프셋 모드와 함께 부가된 레지스터 서큘러에서 평가될 수도 있다. 도8의 어드레스 생성 프로세스(160)는 각각의 이러한 방법들을 도시한다.
비순환 자동 증가 어드레스 계산은 AUG(80)에서 완료되는데, 여기서 순환 자동 증가 어드레스 계산은 또한 설명된 예에서 ALU(82)를 필요로 한다. 부하 또는 저장 명령이 EA를 생성하기 위해 사전 증가하거나 AIA를 생성하기 위해 사후 증가할 수 없기 때문에, 동일한 가산기가 EA 및 AIA 모두에 대해 공유될 수 있다.
순환 어드레싱 모드에서, 어드레스 생성 프로세스(160)는 스트라이드에 의해 분리된 액세스들을 갖는 순환 버퍼(100)를 유지하는데, 상기 스트라이드는 양 또는 음 중 하나이다. 포인터의 현재 값은 스트라이드에 부가된다. 만일 결과가 순환 버퍼(100)의 어드레스 범위를 오버플로우하거나 또는 언더플로우할 경우, 버퍼 길이는 순환 버퍼(100) 내의 위치로 되돌아가는 포인터 포인트를 갖도록 (개별적으로) 감산 또는 부가된다.
DSP(40)에서, 순환 버퍼(100)의 시작 어드레스는 버퍼의 길이보다 큰 가장 작은 2의 거듭제곱으로 정렬한다. 만일 즉시 오프셋인 스트라이드가 양이면, 부가는 두 가지로 실현될 수 있다. 합이 순환 버퍼 길이 내에 있으면, 이 경우 합은 최종 AIA 값이며, 합이 버퍼 길이보다 크면, 이 경우 버퍼 길이는 감산을 필요로 한다. 만일 스트라이드가 음이면, 부가가 다시 두 가지 결과를 초래한다.
만일 합이 시작 어드레스보다 크면, 이는 최종 AIA 값이다. 만일 합이 시작 어드레스보다 작으면, 버퍼 길이는 부가될 필요가 있다. 여기서, 데이터 경로는 시작 어드레스가 2(K+2)으로 정렬되고 길이가 2(K+2)보다 작을 필요가 있다는 사실의 장점을 취할 것이며, 여기서 K는 명령 특정 즉시 값이다. Rx[31:(K+2)] 값은 부가에 앞서 제로로 마스킹된다. 역마스크는 이후의 사용을 위해 프리픽스 비트[31:(K+2)]를 유지한다. AGU(80) 가산기에서 마스킹된 Rx를 AGU(80)의 스트라이드에 부가하고, ALU(82) 가산기에서 합으로부터 길이를 감산함으로써, 스트라이드(즉시 오프셋)가 음일 때, 버퍼 오버플로우가 결정된다. 만일 결과가 양이면, AIA[(K+2)-1:0]는 ALU(82) 가산기로부터 도출되고, 그렇지 않으며, 결과는 AGU(80) 가산기로부터 도출된다. AIA[31:(K+2)]는 Rx[31:(K+2)]와 동일하다.
스트라이드가 음일 때, AGU 가산기에서 마스킹된 Rx를 스트라이드에 부가함으로써, 버퍼 언더플로우가 결정된다. 만일 이러한 합이 양이면, AIA[(K+2)-1:0]는 AGU(80) 가산기로부터 도출된다. 만일 합이 음이면, ALU(82) 가산기에서 길이가 합에 부가되며, AIA[(K+2)-1:0]는 ALU(82) 가산기로부터 도출된다. 한편, AIA[31:(K+2)]는 Rx[31:(K+2)]와 같다.
ALU(82) 가산기에서 길이가 부가 또는 감산되는 지는 오프셋의 부호에 의해 결정된다. POR 옵션을 갖는 이슈는 POR 옵션이 가산기의 Rx 입력에 대한 마스크를 실행하기 위해 AND 게이트를 부가한다는 것이며, 이는 임계 경로이다. 택일적인 구현은 이하와 같다.
이러한 경우, Rx는 스트라이드에 부가된다. AGU(80) 가산기의 합(이는 AIA 에 대해 비 임계적임)은 마스킹됨으로써, Sum[(K+2)-1:0]만이 ALU(82) 가산기에 대해 하나의 입력으로서 제공되는 반면, 길이 또는 길이의 2의 보수가 다른 입력으로서 제공된다. 만일 스트라이드가 양이면, 길이는 ALU 가산기에서 마스킹된 합으로부터 감산된다. 만일 결과가 음이면, AIA[(K+2)-1:0]는 AGU(80) 가산기로부터 도출되며, 어떠한 오버플로우도 발생하지 않으며, 그렇지 않으면, 결과는 ALU 가산기로부터 도출(오버플로우)된다. AIA[31:(K+2)]는 언제나 Rx[31:(K+2)]와 같다.
만일 스트라이드가 음이면, AGU 가산기 Sum[31:2(K+2)]는 Rx[31:(K+2)]와 비교된다. 만일 이러한 프리픽스 비트가 동일하게 유지되면, 이는 어떠한 언더플로우도 발생하지 않았음을 의미한다. 이러한 경우, AIA[(K+2):0]는 AGU(80) 가산기로부터 도출된다. 만일 프리픽스 비트들이 상이하면, 언더플로우가 존재했었다는 것이다. 이러한 경우, 길이는 AGU(80) 가산기에서 마스킹된 합으로 부가된다. AIA[(K+2):0]는 이 경우 AGU(80) 가산기로부터 도출된다. 한편, AIA[31:(K+2)]는 언제나 RX[31:(K+2)]와 동일하다. 이러한 방식으로, 마스킹 AND는 임계 경로로부터 제거된다. 그러나 28비트 비교기가 부가된다.
설명된 프로세싱 특징 및 기능들은 다양한 방식으로 구현될 수 있다. 예를 들어, DSP(40)가 전술한 연산을 실행할 수 있음은 물론, 본 발명은 ASIC, 마이크로 제어기, 마이크로프로세서, 또는 설명된 기능들을 구현하기 위해 설계된 다른 전자 회로들에서 구현될 수 있다. 따라서, 전술한 본 발명의 실시예는 설명된 실시예를 사용 또는 구현하기 위해 기술 분야의 당업자에게 제공된다. 실시예에 대한 다양 한 변경이 기술 분야의 당업자에게 명백하며, 한정된 일반 원리는 다른 실시예에 적용될 수도 있다. 따라서, 설명된 실시예는 본 발명을 한정하려는 것은 아니며, 본 발명의 일반 원리 및 신규한 특징과 조화된다.

Claims (27)

  1. 순환 버퍼를 어드레싱하는 방법으로서,
    상기 순환 버퍼의 길이를 설정하는 단계를 포함하는데, 상기 길이는 상기 순환 버퍼의 어드레싱 가능한 범위를 한정하며;
    상기 순환 버퍼에 대한 시작 어드레스를 설정하는 단계를 포함하는데, 상기 시작 어드레스는 2의 거듭제곱에 정렬되며;
    상기 스칼라 버퍼에 대한 마지막 어드레스를 설정하는 단계를 포함하는데, 상기 마지막 어드레스는 상기 길이만큼 상기 시작 어드레스로부터 이격되어 위치되고 상기 길이보다 큰 2의 거듭제곱보다 작으며;
    상기 순환 버퍼 내의 어드레스에 대해 현재 포인터 위치를 결정하는 단계를 포함하는데, 상기 현재 포인터 위치는 상기 시작 어드레스와 상기 마지막 어드레스 사이이며;
    상기 시작 어드레스와 상기 마지막 어드레스 사이에서 비트들의 스트라이드 값을 결정하는 단계;
    상기 현재 포인터 위치로부터 상기 스트라이드 값의 비트들의 수를 시프팅함으로써 상기 순환 버퍼 내에서 새로운 포인터 위치를 결정하는 단계; 및
    상기 길이를 갖는 상기 새로운 포인터 위치의 산술 연산에 의해 상기 순환 버퍼 내에 있을 조정된 포인터 위치를 결정하는 단계를 포함하는,
    순환 버퍼를 어드레싱하는 방법.
  2. 제1항에 있어서,
    (a) 상기 새로운 포인터 위치가 상기 마지막 어드레스보다 작은 경우, 상기 새로운 포인터 위치가 될 상기 조정된 포인터 위치를 조정하고, 및 (b) 상기 새로운 포인터 위치가 상기 마지막 어드레스보다 큰 경우, 상기 새로운 포인터 위치로부터 상기 길이를 감산하여 상기 조정된 포인터를 조정함으로써,
    양의 스트라이드의 경우, 상기 조정된 포인터 위치의 상기 위치를 설정하는 단계를 더 포함하는 것을 특징으로 하는 순환 버퍼를 어드레싱하는 방법.
  3. 제1항에 있어서,
    (a) 상기 새로운 포인터 위치가 상기 시작 어드레스보다 큰 경우, 상기 새로운 포인터 위치가 될 상기 조정된 포인터 위치를 조정하고, 및 (b) 상기 새로운 포인터 위치가 상기 시작 어드레스보다 작은 경우, 상기 길이를 상기 새로운 포인터 위치에 부가하여 상기 조정된 포인터를 조정함으로써,
    음의 스트라이드의 경우, 상기 조정된 포인터 위치의 상기 위치를 설정하는 단계를 더 포함하는 것을 특징으로 하는 순환 버퍼를 어드레싱하는 방법.
  4. 제1항에 있어서,
    상기 새로운 포인터 위치를 결정하고 상기 조정된 포인터 위치를 결정하는 단계에 앞서 상기 시작 어드레스 최하위 비트들을 제로로 설정하는 단계를 더 포함 하는 것을 특징으로 하는 순환 버퍼를 어드레싱하는 방법.
  5. 제1항에 있어서,
    어드레스 생성 유닛에서 상기 현재 포인터로서 마스킹된 어드레스를 상기 양의 스트라이드에 부가하고, 산술 로직 유닛 가산기에서 합으로부터 상기 길이를 감산함으로써 양의 스트라이드의 경우 상기 조정된 포인터 위치를 도출하는 단계를 더 포함하는 것을 특징으로 하는 순환 버퍼를 어드레싱하는 방법.
  6. 제1항에 있어서,
    어드레스 생성 유닛에서 상기 현재 포인터로서 마스킹된 어드레스를 상기 음의 스트라이드에 부가함으로써, 음의 스트라이드의 경우 상기 조정된 포인터 위치를 도출하고,
    음의 합인 경우, 상기 어드레스 생성 유닛으로부터 직접 상기 조정된 포인터 위치를 도출하고, 그렇지 않으면, 산술 로직 유닛에서 상기 길이를 합에 부가하여 상기 조정된 포인터 위치를 도출하고, 상기 조정된 포인터 위치를 상기 산술 로직 유닛으로부터 도출하는 단계를 더 포함하는 것을 특징으로 하는 순환 버퍼를 어드레싱하는 방법.
  7. 제1항에 있어서,
    상기 새로운 포인터 위치를 생성시, 어드레스 생성 유닛의 가산기로의 입력 을 생성하기 위해 상기 현재 포인터 입력의 마스크를 형성하도록 AND 게이트를 이용하는 단계를 더 포함하는 것을 특징으로 하는 순환 버퍼를 어드레싱하는 방법.
  8. 제1항에 있어서,
    상기 현재 포인터 위치와 상기 스트라이드의 합을 도출하는 단계; 및
    산술 로직 유닛에서 가산기 회로에 대한 제1 입력으로서 상기 합, 및 상기 가산기 회로에 대한 제2 입력으로서 상기 길이의 2의 보수 또는 상기 길이 중 하나를 마스킹 및 제공하는 단계를 더 포함하는 것을 특징으로 하는 순환 버퍼를 어드레싱하는 방법.
  9. 순환 버퍼를 설정하는 단계를 포함하는, 상기 순환 버퍼의 어드레싱을 설정하는 시스템으로서, 상기 순환 버퍼는,
    상기 순환 버퍼의 길이를 포함하는데, 상기 길이는 상기 순환 버퍼의 어드레싱 가능한 범위를 한정하며;
    상기 순환 버퍼에 대한 시작 어드레스를 포함하는데, 상기 시작 어드레스는 2의 거듭제곱으로 정렬되며;
    상기 순환 버퍼에 대한 마지막 어드레스를 포함하는데, 상기 마지막 어드레스는 상기 길이만큼 상기 시작 어드레스로부터 이격되어 위치되고 상기 길이보다 큰 2의 거듭제곱보다 작으며;
    상기 순환 버퍼 내의 어드레스에 대해 현재 포인터 위치를 결정하는 어드레 스 생성 유닛을 포함하는데, 상기 현재 포인터 위치는 상기 시작 어드레스와 상기 마지막 어드레스 사이에 있으며;
    상기 시작 어드레스와 상기 마지막 어드레스 사이에서 비트들의 스트라이드 값을 결정하기 위해 상기 어드레스 생성 유닛과 관련된 스트라이드 결정 명령들;
    상기 현재 포인터 위치로부터 상기 스트라이드 값의 비트들의 수를 시프팅함으로써 상기 순환 버퍼 내의 새로운 포인터 위치를 결정하기 위한 상기 어드레스 생성 유닛과 관련된 새로운 포인터 위치 명령들; 및
    상기 길이를 갖는 새로운 포인터 위치의 산술 연산에 의해 상기 순환 버퍼 내에 있을 조정된 포인터 위치를 결정하기 위한 상기 어드레스 생성 유닛과 관련된 조정된 포인터 위치 명령들을 포함하는,
    순환 버퍼의 어드레싱을 설정하는 시스템.
  10. 제9항에 있어서, 상기 조정된 포인터 위치 명령들은,
    (a) 상기 새로운 포인터 위치가 상기 마지막 어드레스보다 작은 경우, 상기 새로운 포인터 위치가 될 상기 조정된 포인터 위치를 조정하고, 및 (b) 상기 새로운 포인터 위치가 상기 마지막 어드레스보다 큰 경우, 상기 새로운 포인터 위치로부터 상기 길이를 감산하여 상기 조정된 포인터를 조정함으로써,
    양의 스트라이드의 경우, 상기 조정된 포인터 위치의 상기 위치를 설정하는 명령들을 더 포함하는 것을 특징으로 하는 순환 버퍼의 어드레싱을 설정하는 시스템.
  11. 제9항에 있어서, 상기 조정된 포인터 위치 명령들은,
    (a) 상기 새로운 포인터 위치가 상기 시작 어드레스보다 큰 경우, 상기 새로운 포인터 위치가 될 상기 조정된 포인터 위치를 조정하고, 및 (b) 상기 새로운 포인터 위치가 상기 시작 어드레스보다 작은 경우, 상기 길이를 상기 새로운 포인터 위치에 부가하여 상기 조정된 포인터를 조정함으로써,
    음의 스트라이드의 경우, 상기 조정된 포인터 위치의 상기 위치를 설정하는 명령들을 더 포함하는 것을 특징으로 하는 순환 버퍼의 어드레싱을 설정하는 시스템.
  12. 제9항에 있어서, 상기 새로운 포인터 위치 명령들은,
    상기 새로운 포인터 위치를 결정하고 상기 조정된 포인터 위치를 결정하는 단계에 앞서 상기 시작 어드레스 최하위 비트들을 제로로 설정하는 명령들을 더 포함하는 것을 특징으로 하는 순환 버퍼의 어드레싱을 설정하는 시스템.
  13. 제9항에 있어서, 상기 조정된 포인터 위치 명령들은,
    어드레스 생성 유닛에서 상기 현재 포인터로서 마스킹된 어드레스를 상기 양의 스트라이드에 부가하고, 산술 로직 유닛 가산기에서 합으로부터 상기 길이를 감산함으로써 양의 스트라이드의 경우 상기 조정된 포인터 위치를 도출하는 명령들을 더 포함하는 것을 특징으로 하는 순환 버퍼의 어드레싱을 설정하는 시스템.
  14. 제9항에 있어서, 상기 조정된 포인터 위치 명령들은,
    어드레스 생성 유닛에서 상기 현재 포인터로서 마스킹된 어드레스를 상기 음의 스트라이드에 부가함으로써, 음의 스트라이드의 경우 상기 조정된 포인터 위치를 도출하고,
    음의 합인 경우, 상기 어드레스 생성 유닛으로부터 직접 상기 조정된 포인터 위치를 도출하고, 그렇지 않으면, 산술 로직 유닛에서 상기 길이를 합에 부가하여 상기 조정된 포인터 위치를 도출하고, 상기 조정된 포인터 위치를 상기 산술 로직 유닛으로부터 도출하는 명령들을 더 포함하는 것을 특징으로 하는 순환 버퍼의 어드레싱을 설정하는 시스템.
  15. 제9항에 있어서,
    상기 현재 포인터 위치, 상기 스트라이드 값, 및 상기 조정된 포인터 위치를 결정시, 상기 어드레스 생성 유닛과 협동하는 산술 로직 유닛을 더 포함하는데, 상기 어드레스 생성 유닛은 AND 게이트 및 가산기 회로를 포함하며,
    상기 조정된 포인터 위치 명령들은 상기 새로운 포인터 위치를 생성시, 어드레스 생성 유닛의 가산기로의 입력을 생성하기 위해 상기 현재 포인터 입력의 마스크를 생성하도록 AND 게이트를 이용하는 명령들을 포함하는 것을 특징으로 하는 순환 버퍼의 어드레싱을 설정하는 시스템.
  16. 제9항에 있어서, 상기 현재 포인터 위치, 상기 스트라이드 값, 및 상기 조정된 포인터 위치를 결정시 상기 어드레스 생성 유닛과 협력하는 산술 로직 유닛;
    상기 현재 포인터 위치 및 상기 스트라이드의 합을 도출하기 위해 상기 조정된 포인터 위치 명령들과 관련된 합산 명령들; 및
    산술 로직 유닛에서 가산기 회로에 대한 제1 입력으로서 상기 합 및 상기 가산기 회로에 대한 제2 입력으로서 상기 길이의 2의 보수 또는 상기 길이 중 하나를 마스킹 및 제공하는 마스킹 명령들을 더 포함하는 것을 특징으로 하는 순환 버퍼의 어드레싱을 설정하는 시스템.
  17. 순환 버퍼 제어 및 어드레싱 수단을 포함하며 디지털 신호들을 프로세싱하는 디지털 신호 프로세서로서,
    상기 순환 버퍼의 길이를 설정하는 수단을 포함하는데, 상기 길이는 상기 순환 버퍼의 어드레싱 가능한 범위를 한정하며;
    상기 순환 버퍼에 대한 시작 어드레스를 설정하는 수단을 포함하는데, 상기 시작 어드레스는 2의 거듭제곱에 정렬되며;
    상기 스칼라 버퍼에 대한 마지막 어드레스를 설정하는 수단을 포함하는데, 상기 마지막 어드레스는 상기 길이만큼 상기 시작 어드레스로부터 이격되어 위치되고 상기 길이보다 큰 2의 거듭제곱보다 작으며;
    상기 순환 버퍼 내의 어드레스에 대해 현재 포인터 위치를 결정하는 수단을 포함하는데, 상기 현재 포인터 위치는 상기 시작 어드레스와 상기 마지막 어드레스 사이이며;
    상기 시작 어드레스와 상기 마지막 어드레스 사이에서 비트들의 스트라이드 값을 결정하는 수단;
    상기 현재 포인터 위치로부터 상기 스트라이드 값의 비트들의 수를 시프팅함으로써 상기 순환 버퍼 내에서 새로운 포인터 위치를 결정하는 수단; 및
    상기 길이를 갖는 상기 새로운 포인터 위치의 산술 연산에 의해 상기 순환 버퍼 내에 있을 조정된 포인터 위치를 결정하는 수단을 포함하는,
    디지털 신호 프로세서.
  18. 제17항에 있어서,
    (a) 상기 새로운 포인터 위치가 상기 마지막 어드레스보다 작은 경우, 상기 새로운 포인터 위치가 될 상기 조정된 포인터 위치를 조정하고, 및 (b) 상기 새로운 포인터 위치가 상기 마지막 어드레스보다 큰 경우, 상기 새로운 포인터 위치로부터 상기 길이를 감산하여 상기 조정된 포인터를 조정함으로써,
    양의 스트라이드의 경우, 상기 조정된 포인터 위치의 상기 위치를 설정하는 수단을 더 포함하는 것을 특징으로 하는 디지털 신호 프로세서.
  19. 제17항에 있어서,
    (a) 상기 새로운 포인터 위치가 상기 시작 어드레스보다 큰 경우, 상기 새로운 포인터 위치가 될 상기 조정된 포인터 위치를 조정하고, 및 (b) 상기 새로운 포 인터 위치가 상기 시작 어드레스보다 작은 경우, 상기 길이를 상기 새로운 포인터 위치에 부가하여 상기 조정된 포인터를 조정함으로써,
    음의 스트라이드의 경우, 상기 조정된 포인터 위치의 상기 위치를 설정하는 수단을 더 포함하는 것을 특징으로 하는 디지털 신호 프로세서.
  20. 제17항에 있어서,
    상기 새로운 포인터 위치를 결정하고 상기 조정된 포인터 위치를 결정하는 단계에 앞서 상기 시작 어드레스 최하위 비트들을 제로로 설정하는 수단을 더 포함하는 것을 특징으로 하는 디지털 신호 프로세서.
  21. 제17항에 있어서,
    어드레스 생성 유닛에서 상기 현재 포인터로서 마스킹된 어드레스를 상기 양의 스트라이드에 부가하고, 산술 로직 유닛 가산기에서 합으로부터 상기 길이를 감산함으로써 양의 스트라이드의 경우 상기 조정된 포인터 위치를 도출하는 수단을 더 포함하는 것을 특징으로 하는 디지털 신호 프로세서.
  22. 제17항에 있어서,
    어드레스 생성 유닛에서 상기 현재 포인터로서 마스킹된 어드레스를 상기 음의 스트라이드에 부가함으로써, 음의 스트라이드의 경우 상기 조정된 포인터 위치를 도출하고,
    음의 합인 경우, 상기 어드레스 생성 유닛으로부터 직접 상기 조정된 포인터 위치를 도출하고, 그렇지 않으면, 산술 로직 유닛에서 상기 길이를 합에 부가하여 상기 조정된 포인터 위치를 도출하고, 상기 조정된 포인터 위치를 상기 산술 로직 유닛으로부터 도출하는 수단을 더 포함하는 것을 특징으로 하는 디지털 신호 프로세서.
  23. 제17항에 있어서,
    상기 새로운 포인터 위치를 생성시, 어드레스 생성 유닛의 가산기로의 입력을 생성하기 위해 상기 현재 포인터 입력의 마스크를 형성하도록 AND 게이트를 이용하는 수단을 더 포함하는 것을 특징으로 하는 디지털 신호 프로세서.
  24. 제17항에 있어서,
    상기 현재 포인터 위치와 상기 스트라이드의 합을 도출하는 수단; 및
    산술 로직 유닛에서 가산기 회로에 대한 제1 입력으로서 상기 합, 및 상기 가산기 회로에 대한 제2 입력으로서 상기 길이의 2의 보수 또는 상기 길이 중 하나를 마스킹 및 제공하는 수단을 더 포함하는 것을 특징으로 하는 디지털 신호 프로세서.
  25. 디지털 신호 프로세서상에서 명령들을 프로세싱하기 위해 컴퓨터 판독가능 프로그램 코드 수단이 포함된 컴퓨터 이용가능 매체로서,
    상기 순환 버퍼의 길이를 설정하는 컴퓨터 판독가능 프로그램 코드 수단을 포함하는데, 상기 길이는 상기 순환 버퍼의 어드레싱 가능한 범위를 한정하며;
    상기 순환 버퍼에 대한 시작 어드레스를 설정하는 컴퓨터 판독가능 프로그램 코드 수단을 포함하는데, 상기 시작 어드레스는 2의 거듭제곱에 정렬되며;
    상기 스칼라 버퍼에 대한 마지막 어드레스를 설정하는 컴퓨터 판독가능 프로그램 코드 수단을 포함하는데, 상기 마지막 어드레스는 상기 길이만큼 상기 시작 어드레스로부터 이격되어 위치되고 상기 길이보다 큰 2의 거듭제곱보다 작으며;
    상기 순환 버퍼 내의 어드레스에 대해 현재 포인터 위치를 결정하는 컴퓨터 판독가능 프로그램 코드 수단을 포함하는데, 상기 현재 포인터 위치는 상기 시작 어드레스와 상기 마지막 어드레스 사이이며;
    상기 시작 어드레스와 상기 마지막 어드레스 사이에서 비트들의 스트라이드 값을 결정하는 컴퓨터 판독가능 프로그램 코드 수단;
    상기 현재 포인터 위치로부터 상기 스트라이드 값의 비트들의 수를 시프팅함으로써 상기 순환 버퍼 내에서 새로운 포인터 위치를 결정하는 컴퓨터 판독가능 프로그램 코드 수단; 및
    상기 길이를 갖는 상기 새로운 포인터 위치의 산술 연산에 의해 상기 순환 버퍼 내에 있을 조정된 포인터 위치를 결정하는 컴퓨터 판독가능 프로그램 코드 수단을 포함하는,
    컴퓨터 이용가능 매체.
  26. 제25항에 있어서,
    (a) 상기 새로운 포인터 위치가 상기 마지막 어드레스보다 작은 경우, 상기 새로운 포인터 위치가 될 상기 조정된 포인터 위치를 조정하고, 및 (b) 상기 새로운 포인터 위치가 상기 마지막 어드레스보다 큰 경우, 상기 새로운 포인터 위치로부터 상기 길이를 감산하여 상기 조정된 포인터를 조정함으로써,
    양의 스트라이드의 경우, 상기 조정된 포인터 위치의 상기 위치를 설정하는 컴퓨터 판독가능 프로그램 코드 수단을 더 포함하는 것을 특징으로 하는 컴퓨터 이용가능 매체.
  27. 제25항에 있어서,
    (a) 상기 새로운 포인터 위치가 상기 시작 어드레스보다 큰 경우, 상기 새로운 포인터 위치가 될 상기 조정된 포인터 위치를 조정하고, 및 (b) 상기 새로운 포인터 위치가 상기 시작 어드레스보다 작은 경우, 상기 길이를 상기 새로운 포인터 위치에 부가하여 상기 조정된 포인터를 조정함으로써,
    음의 스트라이드의 경우, 상기 조정된 포인터 위치의 상기 위치를 설정하는 컴퓨터 판독가능 프로그램 코드 수단을 더 포함하는 것을 특징으로 하는 컴퓨터 이용가능 매체.
KR1020087011890A 2005-10-20 2006-10-20 스케일링가능하고 프로그램가능한 순환 버퍼에 대한 포인터계산 방법 및 시스템 KR20080072852A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/255,434 US20070094478A1 (en) 2005-10-20 2005-10-20 Pointer computation method and system for a scalable, programmable circular buffer
US11/255,434 2005-10-20

Publications (1)

Publication Number Publication Date
KR20080072852A true KR20080072852A (ko) 2008-08-07

Family

ID=37770978

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087011890A KR20080072852A (ko) 2005-10-20 2006-10-20 스케일링가능하고 프로그램가능한 순환 버퍼에 대한 포인터계산 방법 및 시스템

Country Status (9)

Country Link
US (1) US20070094478A1 (ko)
EP (1) EP1941351A2 (ko)
JP (1) JP2009512942A (ko)
KR (1) KR20080072852A (ko)
CN (1) CN101331449A (ko)
CA (1) CA2626684A1 (ko)
RU (1) RU2395835C2 (ko)
TW (1) TW200732912A (ko)
WO (1) WO2007048133A2 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10354689B2 (en) * 2008-04-06 2019-07-16 Taser International, Inc. Systems and methods for event recorder logging
US20130339677A1 (en) * 2011-02-28 2013-12-19 St. Jude Medical Ab Multiply-and-accumulate operation in an implantable microcontroller
TWI470575B (zh) * 2011-11-24 2015-01-21 Mediatek Inc 用於緩衝裝置之讀取指標暫存的方法、緩衝控制器以及緩衝裝置
FR2983622B1 (fr) * 2011-12-02 2014-01-24 Morpho Ecriture de donnees dans une memoire non volatile de carte a puce
TWI562644B (en) 2012-01-30 2016-12-11 Samsung Electronics Co Ltd Method for video decoding in spatial subdivisions and computer-readable recording medium
RU2592465C2 (ru) * 2014-07-24 2016-07-20 Федеральное государственное учреждение "Федеральный научный центр Научно-исследовательский институт системных исследований Российской академии наук" (ФГУ ФНЦ НИИСИ РАН) Способ заполнения кэш-памяти команд и выдачи команд на выполнение и устройство заполнения кэш-памяти команд и выдачи команд на выполнение
RU2598323C1 (ru) * 2015-03-26 2016-09-20 Общество с ограниченной ответственностью "Научно-производственное предприятие "Цифровые решения" Способ адресации кольцевого буфера в памяти микропроцессора
US9287893B1 (en) * 2015-05-01 2016-03-15 Google Inc. ASIC block for high bandwidth LZ77 decompression
TWI621944B (zh) * 2016-06-08 2018-04-21 旺宏電子股份有限公司 執行存取操作的方法及裝置
US20180054374A1 (en) * 2016-08-19 2018-02-22 Andes Technology Corporation Trace information encoding apparatus, encoding method thereof, and readable computer medium
US10649686B2 (en) * 2018-05-21 2020-05-12 Red Hat, Inc. Memory cache pressure reduction for pointer rings

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623621A (en) * 1990-11-02 1997-04-22 Analog Devices, Inc. Apparatus for generating target addresses within a circular buffer including a register for storing position and size of the circular buffer
US5659700A (en) * 1995-02-14 1997-08-19 Winbond Electronis Corporation Apparatus and method for generating a modulo address
JP2001005721A (ja) * 1999-06-17 2001-01-12 Nec Ic Microcomput Syst Ltd Dspによるリング・バッファ用メモリ確保によるフィルタ処理方法及びそのフィルタ処理システム
TW513859B (en) * 2001-04-19 2002-12-11 Faraday Tech Corp Modulo address generator circuit

Also Published As

Publication number Publication date
CA2626684A1 (en) 2007-04-26
EP1941351A2 (en) 2008-07-09
TW200732912A (en) 2007-09-01
JP2009512942A (ja) 2009-03-26
CN101331449A (zh) 2008-12-24
US20070094478A1 (en) 2007-04-26
RU2395835C2 (ru) 2010-07-27
RU2008119809A (ru) 2009-11-27
WO2007048133A3 (en) 2007-08-02
WO2007048133A2 (en) 2007-04-26

Similar Documents

Publication Publication Date Title
KR20080072852A (ko) 스케일링가능하고 프로그램가능한 순환 버퍼에 대한 포인터계산 방법 및 시스템
KR101041647B1 (ko) 캐시 메모리의 최대 상주 교체를 위한 방법 및 시스템
Grayson et al. Evolution of the samsung exynos cpu microarchitecture
US7941585B2 (en) Local scratchpad and data caching system
CN107077329B (zh) 用于实现和维持判定值的栈的方法和设备
EP3238073B1 (en) Hiding page translation miss latency in program memory controller by selective page miss translation prefetch
US20060179236A1 (en) System and method to improve hardware pre-fetching using translation hints
CN111213131B (zh) 高速缓存器中的零时延预提取
US11238155B2 (en) Microarchitectural mechanisms for the prevention of side-channel attacks
CN112149118A (zh) 减轻受控通道和基于缓存的边通道攻击的处理器指令支持
US9557936B2 (en) Protection of memories, datapath and pipeline registers, and other storage elements by distributed delayed detection and correction of soft errors
CN105718386B (zh) 程序存储器控制器中页面窗口的本地页面转换和许可存储
US6363471B1 (en) Mechanism for handling 16-bit addressing in a processor
US20070022270A1 (en) Translation lookaside buffer prediction mechanism
GB2542831A (en) Fetch unit for predicting target for subroutine return instructions
US9652402B2 (en) Hiding page translation miss latency in program memory controller by next page prefetch on crossing page boundary
CN114691597A (zh) 自适应远程原子操作
US20230418757A1 (en) Selective provisioning of supplementary micro-operation cache resources
CN114661627A (zh) 单次再使用处理器缓存策略
CN114661630A (zh) 动态包含性末级高速缓存
CN117591176A (zh) 处理装置、处理方法以及计算机可读存储介质
CN115858022A (zh) 集群化解码管线的可缩放切换点控制电路系统
WO2007087270A2 (en) Processor having a data mover engine that associates register addresses with memory addresses

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application