KR20010043460A - 디지털 통신 프로세서 - Google Patents

디지털 통신 프로세서 Download PDF

Info

Publication number
KR20010043460A
KR20010043460A KR1020007012507A KR20007012507A KR20010043460A KR 20010043460 A KR20010043460 A KR 20010043460A KR 1020007012507 A KR1020007012507 A KR 1020007012507A KR 20007012507 A KR20007012507 A KR 20007012507A KR 20010043460 A KR20010043460 A KR 20010043460A
Authority
KR
South Korea
Prior art keywords
processor
data stream
data
packet
queue
Prior art date
Application number
KR1020007012507A
Other languages
English (en)
Other versions
KR100633755B1 (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 KR20010043460A publication Critical patent/KR20010043460A/ko
Application granted granted Critical
Publication of KR100633755B1 publication Critical patent/KR100633755B1/ko

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/50Circuit switching systems, i.e. systems in which the path is physically permanent during the communication
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/56Routing software
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2441Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

본 발명은, 일반적으로 데이터 스트림, 특별히는 패킷 스트림을 처리하는데 이용하기 위한 집적회로(203)에 관한 것이다. 집적회로는 다수의 패킷 프로세서(307, 313, 303), 테이블 룩업 엔진(301), 큐 관리 엔진(305) 및 버퍼 관리 엔진(315)을 포함한다. 패킷 프로세서는 수신 프로세서(421), 송신 프로세서(427) 및 risc 코어(core) 프로세서(401)를 포함하며, 이들 프로세서는 모두 프로그래밍 가능하다. 상기 수신 프로세서 및 상기 코어 프로세서는 수신되는 패킷을 수신하여 경로지정하도록 협력하며, 상기 코어 프로세서 및 상기 송신 프로세서는 패킷을 송신하도록 협력한다. 경로지정은, 상기 수신된 패킷의 페이로드(payload)를 설명하는 설명자(217)를 수신하는 큐 관리 엔진에서 큐(215)를 결정하기 위해서 상기 테이블 룩업 엔진으로부터 정보를 이용함으로써 이루어진다. 송신 프로세서는 큐로부터 설명자를 판독하여, 이 설명자에서 설명된 페이로드를 송신한다. 코어 프로세서, 송신 프로세서 및 수신 프로세서는 병렬로 동작한다. 패킷 프로세서의 로컬 메모리 및 레지스터, 큐 관리 엔진(queue management engine) 및 버퍼 관리 엔진은 글로벌 어드레스 공간(global address space)(321)의 부분이다. 패킷 프로세서는, 직렬 매체에서 수신된 패킷을 처리하기 위한 직렬 프로세서(307)와 적어도 하나의 병렬 프로세서(303)를 포함한다. 병렬 프로세서는 집적회로를 동일한 유형의 또 다른 집적회로, 버스 또는 스위칭 패브릭(fabric)과 연결시키는데 이용될 수 있다. 패킷 프로세서는 글로벌 메모리의 레지스터의 비트를 셋팅함으로써 더 구성될 수 있다. 구성은 직렬 패킷 프로세서의 군집화(aggregation), 직렬 패킷 프로세서 내의 데이터 스트림의 재순환(recirculation), 수신 프로세서 및 송신 프로세서의 구성요소를 바이패스(bypass)하는 것과, 다른 송신 매체를 다루기 위해 직렬 패킷 프로세서의 I/O 핀을 구성하는 것을 포함한다.

Description

디지털 통신 프로세서{DIGITAL COMMUNICATIONS PROCESSOR}
본 특허 출원은 다음의 미국 가출원을 우선권으로 청구한다.
- 제 60/084,706{브라운(Brown) 등이 "프로그래밍 가능한 패킷 스위치"라는 제목으로 1998년 8월 5일 출원}
- 제 60/105,823{브라운(Brown) 등이 "디지털 통신 프로세서"라는 제목으로 1998년 10월 27일 출원}
패킷과 프로토콜
디지털 시스템 사이의 통신은 일반적으로 패킷으로 이루어진다. 패킷은 도 1의 113에 도시되었다. 패킷은, 단지 그 의미가 프로토콜에 의해 결정되는 비트의 시퀀스이다. 프로토콜은, 패킷을 처리하는 디지털 장치가 어떻게 패킷 내의 비트를 해석하는지를 정의한다. 프로토콜에 관계없이, 대부분의 패킷은, 특정한 패킷이 프로토콜에 따라서 어떻게 처리될 것인지를 지시하는 헤더(115)와, 패킷에 의해 전달되고 있는 실제 정보인 페이로드(payload)(117)를 갖는다. 또한 패킷은 단지 패킷의 끝을 지시하는 트레일러(trailer)(119)를 가질 수 있지만, 패킷의 송신 또는 처리중 발생하는 에러의 검출 및/또는 정정을 허용하는 정보를 또한 포함할 수 도 있다. 패킷을 정의하는 프로토콜에 따라서, 패킷은 고정 길이 또는 가변 길이를 가질 것이다. 다음의 논의에서, 헤더(115) 및 트레일러(119)의 내용은, 이들의 내용이 해석되는 방식이 완전히 프로토콜에 의해 결정되기 때문에 프로토콜 데이터로 명명될 것이고, 페이로드(117)의 내용은 페이로드 데이터로 명명될 것이다. 특정한 프로토콜에 대한 패킷은 프레임 또는 셀로 종종 명명된다.
패킷은 많은 다른 레벨의 디지털 시스템에서의 통신에 이용된다. 따라서, 하나의 레벨의 디지털 시스템에서의 패킷 그룹의 페이로드(the payload of a group of packets at one level of the digital system)는 상위 레벨에서의 패킷일 수 있다. 이러한 점은 도 1의 137에 도시된다. IP 패킷(121)은 IP 프로토콜에 따라 해석되는 패킷이다. IP 패킷(121)은 IP 헤더(123) 및 가변 길이의 IP 페이로드(125)를 갖는다. IP 헤더(123)에는 IP 페이로드(125)의 길이에 대한 정보가 포함된다. IP 패킷(121)이 물리적인 네트워크를 통해서 전송될 때, IP 패킷(121)은 전송 패킷(127) 스트림(135)의 페이로드로 운반된다. 각 전송 패킷(127)은 각자의 헤더(129), 페이로드(131) 및 트레일러(133)를 갖는다. 본 명세서에서 전송 패킷으로 명명되는 것은 ISO 7-계층 모델의 링크 계층에서의 패킷이다. 전송 패킷은, 링크 계층에 이용된 프로토콜에 따라서 고정 길이 또는 가변 길이를 가질 것이다.
전송 패킷을 처리하는 장치는 패킷내의 헤더(129)와 트레일러(133)에 의해 지시 되는대로 실행하며, 페이로드(131)의 내용을 검사하지는 않는다. 전송 패킷이 자신의 목적지(destination)에 도달할 때, 페이로드는 전송 패킷이 전달되고자 하는 시스템의 부분에 전달되며, 본 경우에 IP 프로토콜에 따라 동작하는 구성요소에 전달되며, 이러한 구성요소는 IP 패킷(121)을 IP 헤더(123)에서 지시 되는대로 처리한다. 물론, IP 페이로드(125)는 여전히 상위 레벨에 대한 또 다른 패킷일 수 있다. 예를 들면, IP 페이로드는 암호해독기(decrypter)로 보내질 패킷일 수 있으며, 그러한 패킷의 페이로드는 암호화된 IP 패킷(121)일 수 있다. 그러한 경우에, IP 패킷(121)을 처리하는 구성요소는 페이로드를 암호해독기에 전달하며, 암호해독기는 암호화된 IP 패킷(121)을 암호해독하여, 암호해독된 IP 패킷을 구성요소에 반환하며, 구성요소는 추가적인 처리를 위해 IP 패킷을 처리한다. 그러한 처리는 물론, 암호해독된 IP 패킷을 또 다른 목적지로 전달하는 것을 포함하며, 그러한 목적지와의 통신이 전송 패킷(127)을 위한 프로토콜을 통해서 이루어진다면, IP 패킷을 처리하는 구성요소는 암호해독된 IP 패킷을 전송 패킷 스트림을 생성하는 구성요소에 제공할 것이며, 이러한 암호해독된 IP 패킷은 전송 패킷(127)의 페이로드로 운반될 것이다.
패킷 스위치
패킷이, 서로 멀리떨어져 위치한 디지털 시스템 사이에 통신을 하는데 이용될 때, 패킷은 이러한 시스템을 연결하는 디지털 네트워크 상에서 이동한다. 물리적인 레벨에서, 디지털 네트워크는 두 장치 사이에서 신호를 전송하기 위한 임의의 매체, 예를 들면 에테르(ether), 전도성 전선 또는 광케이블을 사용할 수 있다. 패킷은 패킷 스위치에 의해 전송 경로사이에서 경로지정된다. 패킷 스위치는, 전형적으로 패킷 헤더에 포함되는 정보에 따라서 패킷을 경로지정한다. 예상되는 바와 같이, 각 종류의 프로토콜은 각자 자신의 경로지정 규칙을 갖는다. 예를 들면, IP 프로토콜은 논리적인(logical) 경로지정을 이용하는데, 즉 IP 패킷의 각 소스 또는 목적지는 논리적인 IP 어드레스를 가지며, 주어진 목적지로 향하는 IP 패킷은 자신의 헤더에 그러한 목적지의 논리적인 IP 어드레스를 갖는다. 헤더는 목적지의 물리적인 위치를 지시하지 않는다. IP 패킷 스위치는, IP 어드레스를, 패킷이 상기 경로중 적어도 일부분에서 목적지에 이르게 하는 물리적인 어드레스(a physical address that will get the packet at least part of the way to its destination)로 변환해야 하며, 전송 패킷의 스트림(135)이 또한 자신의 페이로드(131)로서 IP 패킷을 운반하는, 그러한 물리적인 어드레스로 향하도록 해야 한다. 따라서, IP 노드{109(n)}는 이더넷(Ethernet) LAN{105(a)} 상의 이더노드{107(n)}에 있으며, LAN{105(a)}에 연결된 IP 패킷 스위치는, 이더넷 패킷의 스트림이 이 패킷의 페이로드로서 IP 패킷을 운반하는 이더넷 노드{107(n)}로 향하게 하여 IP 노드{109(n)}에 어드레스지정된 IP 패킷에 응답을 해야 한다.
전형적인 패킷 스위치가 101에 도시되었다. 패킷 스위치(101)는 많은 물리적인 매체(106)에 연결되며, 이러한 물리적인 매체(106)를 통해서 패킷 스위치(101)는 데이터를 수신하고 송신할 것이다. 이러한 매체의 예는 광섬유 케이블 또는 전기 도체로 이루어진 케이블일 수 있다. 이러한 각 매체(106)는 매체를 통해 전달되는 데이터를 정의하기 위한 각자 자신의 프로토콜을 갖는다, 즉 예를 들면, 광 케이블을 통해서 데이터를 전달하기 위한 한가지 널리 이용되는 프로토콜로 SONET 프로토콜이 있다. 도 1에서, 매체{106(a..m)}는 SONET 프로토콜을 이용하는 광 케이블인 반면, 매체{106(n..z)}는 전기 케이블이다. 본 명세서에서 매체 패킷으로 명명된 매체 레벨에서의 패킷은 자신의 페이로드로서 전송 패킷을 갖는다. ISO 7-계층 모델에 있어서, 매체 패킷은 물리적인 계층의 패킷이다. 스위치(103)에서, 광 케이블을 통해 전달되고 수신되는 전송 패킷은, ATM 광역 네트워크(111)에 이용된 ATM 프로토콜에 따라서 만들어진 패킷인 반면, 전기 케이블을 통해 전달되고 수신되는 전송 패킷은 근거리 네트워크(109)에 이용된 이더넷 프로토콜에 따라서 만들어진다. 많은 경우에, 전송 패킷은 자신의 페이로드로서 IP 패킷을 가지며, 그러한 경우, 패킷 스위치(103)는 IP 패킷을 IP 노드(109)에 경로지정한다. 앞에서 기술되는 바와 같이, 패킷 스위치(103)는, IP 패킷이 자신의 목적지에 도달하기 위해서 이동해야할 매체{106(i)}를 결정한 다음, 이러한 매체와 함께 이용되는 전송 패킷 스트림을 자신의 페이로드로 가지는, 매체에 필요한 프로토콜에 따라서 패킷의 스트림을 만듦으로써 또한 경로를 지정하며 차례로 IP 패킷을 자신의 페이로드로 갖는다. 따라서, 만약 패킷 스위치(103)가 WAN(111)으로부터 IP 패킷을 수신하며, 이들 IP 패킷은 IP 노드{109(n)}로 향하고, IP 노드{109(n)}는 이더넷 LAN{105(a)} 상의 이더넷 노드{107(n)}에 있다면, 패킷 스위치(103)는 매체{106(n)}에 필요한 형태로 패킷 스트림을 만들어야 하며, 이들 패킷의 페이로드는 이더넷 노드{107(n)}로 향하는 이더넷 패킷 스트림이며, 이더넷 패킷은 IP 패킷을 자신의 페이로드로 운반한다.
따라서, 스위치(103)는 다음과 같은 동작을 할 수 있어야 한다.
ξ입력 매체의 프로토콜에 필요한 형태를 가지며, 자신의 페이로드인 전송 패킷과 이러한 전송 패킷의 페이로드인 다른 종류의 패킷을 검색하는 인입 패킷 스트림을 판독.
ξATM WAN(111) 상에서 수신된 전송 패킷을 ATM WAN(111) 상의 또 다른 목적지로 경로지정.
ξ하나의 이더넷 LAN(105) 상에서 수신된 전송 패킷을 패킷 스위치(103)에 연결된 이더넷 LAN 중 하나의 또 다른 목적지에 경로지정.
ξIP 패킷을 가지고, 패킷을 IP 어드레스에 의해 요구 되는대로 경로지정.
ξ출력 매체의 프로토콜에 필요한 형태를 가지며, 전송 패킷을 자신의 페이로드로 가지며, 차례로 다른 종류의 패킷을 자신의 페이로드로 포함하는 패킷의 발신 스트림을 생성.
이러한 경로지정은 한가지 종류의 전송 패킷으로부터 또 다른 종류의 전송 패킷으로의 변환을 필요로 할 수 있다. 예를 들면, 만약 IP 패킷이 ATM WAN(111)으로부터 인입되고, 자신의 목적지로서 이더넷 LAN{105(a)}의 이더넷 노드{109(n)}를 갖는다면, 패킷 스위치(103)는 ATM 전송 패킷의 페이로드로부터 IP 패킷을 추출해야 하며, 이 IP 패킷을 이더넷 노드{107(n)}로 향하는 이더넷 패킷의 페이로드에 놓아야 한다.
게다가, 패킷 스위치는 필터링(filtering), 암호화/암호해독, 또는 스크램블링(scrambling)/디스크램블링(descrambling)과 같은 보안 기능(security function)을 수행하는데 종종 이용된다. 패킷 스위치(103)는 본 명세서에서 개인용 네트워크(104)와 공용 네트워크(102) 사이의 경계에 존재하는 것으로 도시되었다. 각 IP 패킷(121)의 헤더는 패킷에 대한 소스 IP 어드레스와 목적지 IP 어드레스를 포함하며, 개인용 네트워크(104)의 보안 수단(policy)은, 특정한 소스 어드레스를 갖는 공용 네트워크(102)로부터의 IP 패킷에 의한 개인용 네트워크(104)로의 액세스를 막으며, 또한 특정한 소스 어드레스를 갖는 개인용 네트워크(104)로부터의 패킷에 의한 공용 네트워크(102)로의 액세스를 막는다. 스위치(103)는 각 인입 IP 패킷의 소스 어드레스를 금지되는 소스 어드레스의 리스트와 비교함으로써 각 인입 IP 패킷을 필터링하며, 만약 인입 패킷이 리스트 상에 있다면, 이 패킷은 버려진다. 스위치(103)는 발신 패킷을 이와 유사한 방식으로 필터링한다. 암호화/암호해독에 관하여, 패킷 스위치(103)는, 자신의 페이로드가 개인용 네트워크(104)에서의 IP 어드레스에 보내질 암호화된 IP 패킷인 IP 패킷을 공용 네트워크(102)로부터 수신할 것이다. 그러한 경우, 패킷 스위치(103)는 암호화된 IP 패킷을 취하여, 암호해독하고, 이것을 개인용 네트워크(104)에 있는 목적지에 전달한다. 유사하게, 패킷 스위치(103)는, 개인용 네트워크(104)에 속해 있는 목적지에 공용 네트워크(102)를 통해서 전달될 IP 패킷을 수신하며, 이 IP 패킷을 암호화하며, 공용 네트워크(102)를 통해서 다른 IP 패킷을 전달하기 전에 또 다른 IP 패킷의 페이로드로서 이 암호화된 패킷을 배치할 것이다.
패킷 스위치에 의해 제기되는 문제점
패킷 스위치 설계는 엔지니어에게 많은 문제점을 제기한다. 전술한 논의로부터 명백해진 바와 같이, 패킷 스위치는, 인입 패킷 스트림에 페이로드를 위치하며, 발신 패킷 스트림을 생성하며, 전송 레벨 및 상위 레벨에서 경로를 지정하는 것과(routing at the transport level and higher), 패킷내의 정보를 변환하는 것과, 필터링 및 암호화/암호해독과 같은 복잡한 동작을 실행해야 한다. 패킷 스위치는 이러한 동작을 신속하면서도 높은 처리량으로 실행해야 한다. 패킷 스위치는, 또한 패킷이 서로의 고정 시간 간격 내에 자신의 목적지에 도달해야만 하는 디지털 TV와 같은 서비스를 통해서 포스팅(posting)되어진 후 합리적인 시간(시단위로 측정됨)에 반드시 도달해야만 하는 e-메일과 같은 서비스로부터, 패킷사이의 시간간격 뿐만 아니라 패킷이 자신의 소스로부터 자신의 목적지로 네트워크를 횡단하는데 걸리는 전체 시간의 길이에 대해 엄격히 제한되는 패킷 전화통화(packet telephony)에 이르는 다양한 종류의 서비스를 다룰 수 있어야 한다.
현대의 전자 장치에서, 고속, 높은 처리량 및 시간 제약에 대한 만족도는 특수 목적의 하드웨어를 이용하여 달성되어온 반면, 복잡성(complexity)은 프로그램가능한 프로세서를 이용하여 처리되어왔다. 특수 목적 하드웨어에 기반을 둔 장치는 전형적으로 빠르지만, 비싸고, 적응성이 없으며(inflexible), 복잡한 처리를 실행할 수 없다. 또한 프로그램가능한 프로세서에 기반을 둔 장치는 전형적으로 싸고, 적응성이 있으며(flexible), 임의의 원하는 처리를 실행할 수 있지만 느리다.
따라서, 고속의 패킷 스위치는 특수 목적 하드웨어에 기반을 두어왔다. 예상되는 바와 같이, 이러한 패킷 스위치는 빠르고, 높은 처리량을 가지며, 타이밍 제약을 만족시킬수 있었지만, 또한 비싸고, 적응성이 없으며 필터링 또는 암호화/암호해독과 같은 복잡한 기능을 실행할 수는 없었다. 게다가, 각 전송 프로토콜은 각자 자신만의 특수한 하드웨어를 필요로하며, 이러한 이유로, 고속의 스위치에 이용된 전송 프로토콜을 변경하려면 스위치의 특수 목적 하드웨어가 변경되어야 했다.
저속의 패킷 스위치는 프로그램 가능한 프로세서에 기반을 두어왔다. 다시, 예상되는 바와 같이, 먼저 이러한 스위치는 상대적으로 싸고, 임의의 원하는 복잡성을 갖는 기능을 실행할 수 있으며, 전송 프로토콜 또는 다른 프로토콜의 변경을 처리하기 위해 재프로그래밍되는 것만을 필요로 한다. 프로그램 가능한 프로세서에 기반을 둔 패킷 스위치는, 그러나 특수 목적 하드웨어로 만들어진 패킷 스위치에서 볼 수 있었던, 속도, 처리량 또는 시간 제약을 만족시킬 수 있는 능력을 갖지 않는다.
필요한 것은 프로그램 가능한 프로세서에 기반을 둔 패킷 스위치의 특징인 적응성, 적은 비용 및 복잡한 기능을 실행할 수 있는 능력을 갖지만, 또한 시간 제약을 만족시킬 수 있고, 고속 및 높은 처리량을 제공할 수 있는 패킷 스위치이다. 이러한 패킷 스위치를 제공하는 것이 본 명세서에서 기술된 디지털 통신 프로세서의 목적이다.
본 발명은 일반적으로 디지털 패킷 네트워크에 관한 것이며, 좀더 특별히는 그러한 네트워크에 이용되는 스위치에 관한 것이다.
도 1은 네트워크 내의 패킷 스위치에 대한 블록도.
도 2는 본 발명의 디지털 신호 프로세서를 포함하는 패킷 스위치의 상위-레벨 블록도.
도 3은 본 발명의 디지털 통신 프로세서의 상위-레벨 블록도.
도 4는 디지털 통신 프로세서에서의 채널 프로세서에 대한 상위-레벨 블록도.
도 5는 글로벌 어드레스 공간의 맵(map)을 도시한 도면.
도 6은 채널 프로세서의 로컬 메모리의 맵을 도시한 도면.
도 7은 채널 프로세서에서 수신된 패킷의 처리에 대한 흐름도.
도 8은 채널 프로세서에 의해 출력된 패킷의 처리에 대한 흐름도.
도 9는 수신 데이터 스코프 및 송신 데이터 스코프를 도시한 도면.
도 10은 수신 프로세서(421)의 상세한 블록도.
도 11은 수신 바이트 프로세서의 블록도.
도 12는 송신 프로세서(427)의 상세한 블록도.
도 13은 채널 프로세서 클러스터(cluster)의 블록도.
도 14는 채널 프로세서 클러스터를 위한 로컬 메모리 및 공용 메모리의 블록도.
도 15는 실행 프로세서(313)의 블록도.
도 16은 패브릭 프로세서(303)의 블록도.
도 17은 Rx 패브릭 데이터 프로세서 및 Tx 패브릭 데이터 프로세서의 상세한 블록도.
도 18은 두 DCP(디지털 통신 프로세서 : Digital Communication Processor)를 함께 연결함으로써 만들어진 스위치를 도시한 도면.
도 19는 복수의 DCP를 스위칭 패브릭에 연결함으로써 만들어진 스위치를 도시한 도면.
도 20은 DCP 및 또 다른 유형의 디지털 스위칭 로직을 스위칭 패브릭에 연결함으로써 어떻게 스위치가 이루어지는 방법을 도시한 도면.
도 21은 바람직한 실시예의 테이블 메모리(207)의 상세한 사항을 도시한 도면.
도 22는 TLE(테이블 룩업 엔진 : Table Lookup Engine)(301)의 내부 구조를 도시한 도면.
도 23은 레지스터 저장매체(2205) 및 제어 저장매체(2215)의 상세한 사항을 도시한 도면.
도 24는 TLE(301)에 의해 실행되는 명령을 도시한 도면.
도 25는 수신 채널 프로세서{307(i)}와 송신 채널 프로세서{307(j)}가 전송 패킷 시퀀스를 스위칭하기 위해 협력하는 방법을 도시한 도면.
도 26은 클러스터 내의 RxSDP(수신 직렬 데이터 프로세서 : Receiving Serial Data Processor)(421)의 군집의 예를 도시한 도면.
도 27은 클러스터 내의 TxSDP(송신 직렬 데이터 프로세서 : Transmitting Serial Data Processor)(427)의 군집의 예를 도시한 도면.
도 28은 링(ring) 버스 메시지를 도시한 도면.
도 29는 QME(큐 관리 엔진 : Queue Management Engine)(305)에 대한 채널 프로세서 인터페이스를 도시한 도면.
도 30은 바람직한 실시예에서 사용되는 큐 명령을 도시한 도면.
도 31은 바람직한 실시예에서의 큐 데이터 구조를 도시한 도면.
도 32는 바람직한 실시예에서의 멀티캐스트(multicast) 데이터 구조를 도시한 도면.
도 33은 바람직한 실시예에서의 MCL(3123)의 상세한 사항에 대한 도면.
도 34는 큐를 관리하기 위한 다양한 구성을 도시한 도면.
도 35는 QME(305)의 확장 인터페이스를 도시한 도면.
도 36은 스케줄러(scheduler) 확장 인터페이스의 상세한 사항을 도시한 도면.
도 37은 스케줄러 인터페이스 상의 메시지를 위한 타이밍을 도시한 도면.
도 38은 버퍼 관리의 논리적인 개략도.
도 39는 BME(버퍼 관리 엔진 : Buffer Management Engine)(305)의 명령에 대한 상세한 사항을 도시한 도면.
도 40은 BME(305) 하드웨어의 상세한 사항을 도시한 도면.
도 41은 SDRAM(229)의 내용에 대한 상세한 사항을 도시한 도면.
도 42는 링 버스 노드 인터페이스의 상세한 사항을 도시한 도면.
도 43은 글로벌 버스(319)와 페이로드 버스(317)가 구현된 버스 구조를 도시한 도면.
도 44는 도 43의 버스 구조상의 길고 짧은 동작(long and short operations)을 도시한 도면.
도 45는 글로벌 버스(319) 및 페이로드 버스(317) 구현의 상세한 사항을 도시한 도면.
도 46은 구성 가능한 핀 로직(443)의 다양한 구성의 상세한 사항을 도시한 도면.
도 47은 핀과 수신 및 송신 프로세서를 구성하는데 이용되는 레지스터를 도시한 도면.
본 발명은, 일반적으로 많은 데이터 스트림 프로세서, 스트림 컨텍스트(context) 프로세서, 큐 관리자(queue manager) 및 버퍼 관리자를 포함하는 집적회로를 제공함으로써 데이터 스트림을 처리하는 장치와 패킷 스위치에 대한 전술한 문제점을 극복한다.
데이터 스트림을 수신하고 있는 데이터 스트림 프로세서는 데이터 스트림으로부터 제어 정보를 추출하고, 이 제어 정보를 데이터 스트림의 컨텍스트에 의해 필요한 바와 같이 해석되도록 컨텍스트 프로세서에 제공하며, 데이터 스트림을 처리하기 위해서 컨텍스트 프로세서에 의해 제공된 결과를 이용한다. 데이터 스트림이 더 전송되어진 경우, 데이터 스트림 프로세서는 인입 데이터 스트림으로부터의 페이로드를 버퍼에 저장하기 위해 버퍼 관리자에 제공하며, 인큐(enqueue) 명령을 큐 관리자에 전달한다. 인큐 명령은 버퍼를 식별하는 적어도 하나의 태그(tag)를 포함하는 설명자와, 데이터 스트림을 송신하고 있는 데이터 스트림 프로세서에 의해 판독되고 있는 큐를 위한 큐 명시자(specifier)를 포함한다. 큐 관리자는 설명자를 적절한 큐 상에 인큐한다. 송신 데이터 스트림 프로세서가 이러한 큐로부터 설명자를 디큐(dequeue)할 때, 송신 데이터 스트림 프로세서는 버퍼로부터 페이로드를 패치(fetch)하기 위해서 태그를 이용하며, 출력 데이터 스트림에 필요한 제어 정보를 더하고, 페이로드를 이용하여 출력 데이터 스트림을 만든다. 설명자는 데이터 스트림 프로세서에서 실행하는 프로그램에 의해 완전하게 정의되며, 따라서, 큐 관리자는 수신 데이터 스트림 프로세서와 송신 데이터 스트림 프로세서 사이에 순서화된 방식으로 정보를 전달하기 위한 일반적인 메커니즘을 제공한다.
데이터 스트림 프로세서는 수신 프로세서, 송신 프로세서, 제어 데이터 프로세서, 로컬 메모리 및, 수신 프로세서, 송신 프로세서와 버퍼 관리자 사이에서뿐만 아니라 로컬 메모리와 버퍼 관리자 사이에서 DMA(직접 메모리 액세스 : Direct Memory Access) 액세스를 제공하는 DMA 엔진을 포함한다. 각 데이터 스트림 프로세서에 속하는 로컬 메모리 뿐만 아니라 버퍼 관리자와 큐 관리자에 속하는 로컬 메모리는 모두 단일 글로벌 어드레스 공간(single global address space)의 일부이며, 글로벌 어드레스 공간에 대한 액세스를 갖는 임의의 장치에 의해 판독되거나 기록될 수 있다. 데이터 스트림 프로세서가 데이터 스트림을 수신하고 있을 때, 수신 프로세서 및 제어 데이터 프로세서는 스트림을 다음과 같이 처리하도록 협력한다, 즉 송신 프로세서가 이 스트림을 수신하고, 이 스트림으로부터 제어 정보를 추출하며 이 제어 정보를 제어 데이터 프로세서에 전달하며, 버퍼 관리자에 대한 페이로드에 DMA한다. 송신 프로세서가 스트림의 그 다음 영역에 대해 작용하는 동안, 제어 데이터 프로세서는 DMA된 영역에 대한 임의의 컨텍스트 정보를 처리하기 위해서 컨텍스트 프로세서를 이용하며, DMA된 페이로드에 대한 설명자를 갖는 인큐 명령을 큐 관리자에게 전달한다. 데이터 스코프(scope)로 호칭되는 데이터 구조는 제어 데이터 프로세서와 수신 프로세서 사이의 정보 교환을 단순화한다. 송신 프로세서와 제어 데이터 프로세서 사이의 상호 동작은 대체로 동일하지만, 페이로드는 역방향으로 움직인다(with the payload moving in the reverse direction).
데이터 스트림 프로세서는 직렬 데이터 스트림 프로세서와 적어도 하나의 병렬 데이터 스트림 프로세서를 포함한다. 병렬 데이터 스트림 프로세서는 집적회로를 동일한 유형의 또 다른 집적회로, 버스, 또는 스위칭 패브릭(fabric)에 연결하는데 이용될 수 있다.
직렬 데이터 프로세서는 고도로 구성이 가능하게 된다. 구성은 글로벌 어드레스 공간에서 레지스터에 의해 이뤄진다. 각 직렬 데이터 프로세서는 독립된 데이터 스트림을 수신 및/또는 송신하거나, 직렬 데이터 프로세서 그룹은 하나의 데이터 스트림을 처리할 때 협력하기 위해서 군집화될 것이다. 직렬 데이터 프로세서의 I/O 핀은 다른 물리적인 매체의 전기적 요구조건을 충족하도록 구성되며, 또한 군집내의 직렬 데이터 프로세서 모두가 동일한 입력을 수신하도록 구성될 것이다. 수신 프로세서 또는 송신 프로세서 내의 다양한 장치는, 수신 또는 송신되고 있는 특정한 종류의 직렬 입력 스트림을 처리하는데 필요한 대로 인에이블되거나 디스에이블되며, 수신 프로세서 및 송신 프로세서는 이미 처리한 데이터 스트림을 또한 재순환(recirculate)시킬 것이다.
다른 목적 및 이점은, 아래의 상세한 설명 및 도면을 읽자마자, 본 발명에 관련된 당업자에게 분명해질 것이다.
도면의 참조번호는 세 자리 이상의 자릿수를 가지며, 이때 오른쪽 두 자리는, 나머지 자리에 의해 지시된 도면에서의 참조번호이다. 따라서, 참조번호(203)를 갖는 항목은 도 2의 항목(203)을 나타낸다.
다음의 상세한 설명은, 본 발명의 디지털 통신 프로세서를 포함하는 디지털 패킷 스위치의 구조 및 동작에 대한 개요로 시작하여, 계속해서 디지털 통신 프로세서의 구조 및 동작에 대한 개요를 다루며, 이 후에 디지털 통신 프로세서의 구성요소의 구조 및 동작에 대한 상세한 사항을 제시할 것이다.
디지털 통신 프로세서를 포함하는 디지털 패킷 스위치 : 도 2
도 2는, 본 발명의 디지털 통신 프로세서를 구현하는 디지털 통신 프로세서 집적회로(203)를 이용하여 만들어진 패킷 스위치(201)의 블록도이다. 집적회로(201)는 다음의 외부 장치를 위한 인터페이스를 갖는다.
ξ전송 프로토콜에 따라서 전달되거나 수신되고 있는 패킷을 위한 직렬 입력(204) 및 직렬 출력(206)의 최대 16개의 쌍{205(0..15)}
ξ선택적인 디지털 스위칭 장치로의 32 비트 출력과 이러한 스위칭 장치로부터의 32비트 입력{인터페이스(221)}
ξ선택적인 호스트 프로세서(227)로의 PCI 버스 인터페이스(225)
ξSDRAM 버퍼 메모리(229)로의 128 비트-폭 인터페이스(228)
ξSRAM 변환 테이블 메모리(207)로의 64 비트-폭 인터페이스
ξ큐 메모리(213)로의 32 비트-폭 인터페이스
계속해서 이러한 인터페이스에 대해 좀더 상세하게 설명한다면, 디지털 통신 프로세서(203)는, 단일 DCP(203)에서의 직렬 입력 및 출력이 많은 다른 매체 및 전송 프로토콜에 이용될 수 있도록 프로그래밍될 수 있을 것이다. 만약 DCP(203)가 이용되고 있는 네트워크가 바뀐다면, DCP(203)는 새로운 네트워크 배열을 처리하도록 재프로그래밍될 수 있다. 고속의 프로토콜은, 몇 개의 직렬 입력 또는 출력을 고속의 프로토콜을 위한 전송 매체에 연결함으로써 처리될 수 있다. 바람직한 실시예에서, 매체 및 전송 프로토콜은 다음과 같은 것을 포함한다.
ξ10Mb 이더넷
ξ100Mb 이더넷
ξ1Gb 이더넷
ξT1/E1 인터페이스
ξT3/E3 인터페이스
ξOC-3c 인터페이스
ξOC-12c 인터페이스
DCP(203)는 입력(204)에서 매체 패킷을 수신하며, 출력(206)으로부터 매체 패킷을 출력한다. 매체 패킷이 입력(204)에서 수신되고, 출력(206)에서 전송되는 시간 사이에 발생하는 것은 DCP가 어떻게 프로그래밍되었는지에 따라 다르다. DCP(203)가 프로그램될 수 있는 방법은 다음과 같은 사항을 포함한다.
ξ각 입력은 수신 프로세서를 갖고, 각 출력은 송신 프로세서를 가지며, 여기서 이러한 프로세서들은 다른 유형의 매체 패킷, 전송 패킷, 및 전송 패킷의 페이로드인 패킷을 처리하도록 개별적으로 프로그래밍될 수 있다.
ξ입력 및 출력은 군집화될 수 있다.
ξ패킷 스트림과 관련된 상태의 동작은 프로그램가능하며, 그 예로 어드레스 변환 및 에러 정정 코드 처리가 있다.
ξDCP에서 패킷의 소스와 목적지 사이의 관계는 프로그램 가능하고,
ξ패킷 소스로부터 패킷 목적지로 전달된 정보는, 목적지에서 해석되는 방식으로 프로그램 가능하다.
전형적인 패킷 스위칭 응용에 대해서, DCP(203)는 다음과 같이 동작하도록 프로그래밍된다, 즉 각 매체 패킷이 입력(204)에서 수신됨에 따라, DCP(203)는 매체 패킷의 페이로드로부터의 데이터를 버퍼 메모리(229)의 버퍼(231)에 저장하고, 이 저장된 데이터는 본 명세서에서 프로토콜 데이터 유닛(PDU : Protocol Data Unit)으로 명명되며, 많은 경우, 이 PDU는 매체 패킷의 페이로드 부분인 전송 패킷일 것이다. 매체 패킷이 출력될 때, DCP(203)는 버퍼(231)로부터 PDU를 검색하여, 이 PDU에 임의의 필요한 변환을 가하여(예컨대, 전송 패킷에서의 경로지정 정보를 변경시키거나 전송 패킷의 종류를 변경시킨다), 매체 패킷을 위한 프로토콜 데이터를 더한다.
DCP(203)는 변환 테이블 메모리(207)의 변환 테이블(209)을 이용하여 전송 패킷 및 상위-레벨의 패킷을 경로지정한다. 일단 패킷이 경로지정되면, DCP(203)는, 패킷에 대한 PDU를 포함하는 버퍼(231)에 대한 설명자(217)를 패킷이 출력되는 출력(206)을 위한 큐 메모리(213) 내의 큐(215)의 테일(tail)에 배치한다. 일반적으로 각 큐(215)는 단일 출력(206)과 관련되지만, 입력(204)에서 수신된 패킷은 임의의 큐(215)의 테일에 배치되어, 하나의 입력(204)에서 수신된 패킷이 많은 출력(206)을 통해서 출력되게 한다. 패킷은 또한 멀티캐스트, 즉 하나 보다 많은 큐(215)로 인큐될 수 있다. DCP(203)는 출력(206)과 관련된 큐의 헤드로부터 설명자(217)를 획득하여, 이 설명자에 의해 식별된 버퍼(231)의 내용을 큐의 출력(206)에 출력한다.
221에 도시된 바와 같이, DCP(203)는 또한 선택적인 디지털 스위칭 패브릭으로부터 패킷 데이터를 수신하고, 이 스위칭 패브릭에 패킷 데이터를 제공할 수 있다. 스위칭 패브릭은 패킷 스위치(201)와 같은 또 다른 패킷 스위치이거나 디지털 데이터 스트림을 경로지정할 수 있는 임의의 다른 장치일 수 있다. 예를 들면, 패킷 스위치(201)는 다른 패킷 스위치와 함께 크로스바(crossbar) 스위치 또는 심지어 버스에 연결될 수 도 있다. 인터페이스(221)로부터 수신되거나 출력된 패킷 데이터에 대한 경로지정은, 직렬 입력(204)에서 수신된 패킷에 대해 앞에서 기술된 바와 같이 필수적이다. 결국, DCP(203)는 PCI 버스(225)를 통해서 선택적인 호스트(227)로부터 패킷 데이터를 수신하고, 선택적인 호스트(227)에 패킷 데이터를 제공할 수 있다.
외부 제어 인터페이스는 GPIO 인터페이스(223) 및 PCI 버스 인터페이스(225)를 포함한다. GPIO 인터페이스(223)는, LED, 비휘발성 메모리, 물리적인 계층의 직렬 송신 및 수신 구성요소 및 전원과 같은 외부 시스템 요소를 모니터링하고 제어하기 위한 유틸리티 인터페이스이다. PCI 버스 인터페이스(225)는, 스위칭 시스템(201)을 제어하고, 이 시스템(201)에서 수신된 패킷의 내용에 대한 액세스 검사와 같은 상위-레벨의 동작을 또한 수행할 수 있는 호스트 프로세서와 DCP(203)사이에서 통신한다.
동작의 상세한 예
관련 기술의 설명에 대한 예는, 패킷 스위치(201)의 구성요소가 어떻게 패킷을 경로지정하도록 프로그래밍될 수 있는지를 좀더 상세하게 나타내는데 이용될 것이다. 예로, 직렬 쌍{205(i)}의 직렬 입력{204(i)}은, 자신의 페이로드로서 ATM 전송 패킷 스트림을 갖는 SONET 패킷 스트림을 수신하고 있다. ATM 전송 패킷은 자신의 페이로드로서 IP 노드{109(n)}로 향하는 IP 패킷을 가지며, 이 IP 노드{109(n)}는 이더넷 LAN{105(a)}에 부착된 장치{107(n)} 상에 있다. 이더넷 LAN{105(a)}은 직렬 쌍{205(j)}의 직렬 출력{206(j)}에 연결된다. 패킷 스위치(201)는 IP 패킷을 경로지정하는데 이용되고 있으므로, DCP(203)는 IP 패킷의 헤더를 포함하는 페이로드를 찾기 위해서 직렬 입력{204(i)} 상의 인입 전송 패킷을 조사하도록 프로그래밍되었다. IP 패킷 헤더가 발견될 때, DCP(203)는 이 페이로드를 ATM 전송 패킷으로부터 버퍼 메모리(229)의 버퍼(231)로 향하게 하기 시작하며, 버퍼 메모리(229)는 버퍼 태그(233)에 의해 명시된다. 만약 IP 패킷이 버퍼보다 더 길다면, 추가적인 버퍼가 사용된다.
IP 패킷이 버퍼 메모리(229)로 전송되고 있는 동안, DCP(203)는, IP 패킷이 어떻게 경로지정되는지를 결정하기 위해서 IP 패킷의 헤더에 있는 정보를 처리하여, IP 패킷을 경로지정한다. 헤더 정보의 처리는 변환 테이블 메모리(207)의 변환 테이블을 이용하여 이뤄진다. 이 경우에, 두 번의 변환이 이루어져야 한다, 즉 IP 패킷의 헤더에 있는 IP 목적지 어드레스는, 목적지 어드레스를 갖는 IP 노드가 배치된 장치{107(n)}의 이더넷 어드레스로 변환되어야 하며, 장치{107(n)}의 이더넷 어드레스는, 직렬 출력{206(j)}이 이더넷 패킷을 출력하고 있는 큐 메모리(213)의 큐를 위한 식별자로 변환되어야 한다. IP 목적지 어드레스(IPA : IP destination Address)로부터 이더넷 어드레스(ENA : Ethernet Address)로의 이러한 변환중 하나에 대한 변환 테이블 엔트리{211(i)}는 변환 테이블{209(a)}에 도시된다.
DCP(203)는, IP 패킷을 위한 설명자(207)를 만들기 위해서 IP 패킷의 헤더로부터의 정보와 변환 테이블(들)(209)을 이용한다. 설명자에는 이더넷 어드레스와, 패킷을 포함하는 버퍼(231)에 대한 버퍼 태그(233)가 포함된다. DCP(203)는 설명자(207)를 직렬 출력{206{j)}으로부터 출력되고 있는 패킷을 위한 큐{215(j)}의 테일(tail)(221)에 놓는다. 설명자(207)가 큐{215(j)}의 헤드에 도달할 때, DCP(203)는, 전송 패킷을 포함하는 버퍼(231)의 내용을 패치하며, 그 내용을 직렬 출력{206(j)}에 적합한 매체 프로토콜을 갖는 패킷 스트림으로 들어가게 한다. 이러한 매체 패킷은 자신의 페이로드로서 이더넷 전송 패킷을 갖는다. 정보 설명자(207)를 이용하여, DCP(203)는 이더넷 전송 패킷에 장치의 이더넷 어드레스{107(n)}를 제공한다. 차례로, 이더넷 전송 패킷에 대한 페이로드는 버퍼 태그에 의해 명시된 버퍼에 저장된 IP 패킷이다.
여기서, DCP(203)가 물론, 인입 전송 패킷의 최대 16개의 직렬 스트림과 발신 전송 패킷의 최대 16개의 스트림에 대해서 앞에서 기술된 동작 또는 이들 동작에 대한 변동을 동시에 수행하며, 어떤 경우에는 데이터 스트림을 PCI 인터페이스(227)를 통해서 DCP(203) 자신과 인터페이스(221)에서의 디지털 스위치 사이에서 및/또는 DCP(203) 자신과 외부 호스트(227) 사이에서 동시에 전송함이 주지되어야 한다. 게다가, 앞에서 설명된 바와 같이, 많은 경우에, 패킷 스위칭 동작은 엄격한 타이밍 제한에 의해 제어된다. 다음에서 좀더 상세하게 설명되는 바와 같이, DCP(203)의 설계에 있어서 핵심은 DCP(203) 내부에 메모리 구조와 데이터 경로를 제공하는 것이며, 이러한 데이터 경로와 메모리 구조는 이제까지 설명되어왔던 종류의 동작에 필요한 속도 및 회전 지연시간(latency) 특성을 갖는다.
DCP(203)의 구조 : 도 3 및 도 5
도 3은 DCP(203)의 내부 구조에 대한 상위-레벨의 블록도이다. 도 3에 나타난 도 2의 구성요소는, 이들이 도 2에서 부여되었던 참조번호를 갖는다. 전송 패킷이 보내지고 수신되는 직렬 입력 및 출력(205)에서 시작하여, 각 직렬 쌍(205)은 각자 자신의 프로그래밍 가능한 채널 프로세서(307)에 연결되며, 채널 프로세서(307)는 각 직렬 쌍으로부터의 직렬 입력과 각 직렬 쌍으로의 직렬 출력을 처리한다. 따라서 바람직한 실시예에서 16개의 채널 프로세서(307)가 존재한다. 매우 고속의 전송 프로토콜에 대해서, 최대 4개의 채널 프로세서(307)가 309로 도시된 바와 같이 채널 프로세서 클러스터로 결합될 수 있다.
패브릭 프로세서(303)는, 이것이 인터페이스(221)로부터 수신하고, 인터페이스(221)에 제공하는 병렬 데이터를 처리한다는 점을 제외하고는 채널 프로세서와 유사하다. 테이블 룩업 엔진(301)은, 변환 테이블 메모리(207)에서의 테이블을 이용하여 어드레스 변환을 실행한다. 큐 관리 엔진(305)은 설명자의 큐(215)를 관리한다. 일부 실시예에서, 큐는 DCP IC(203)의 메모리에 저장된다. 다른 실시예에서, 큐 메모리(213)는 독립된 외부 메모리이다. 버퍼 관리 엔진(315)은 버퍼 메모리(229)의 버퍼(231)를 관리한다. 실행 프로세서(313)는 다른 구성요소에서 데이터를 초기화하고 유지하며, 선택적인 외부 호스트(227)와의 PCI 버스 인터페이스 및 GPIO 인터페이스를 관리하고, 필요시 더 상위-레벨의 처리를 수행한다. 실행 프로세서(313)에 대한 프로그램 및 데이터는 SDRAM(229)에 저장된다. 실행 프로세서(313), 채널 프로세서(309) 및 패브릭 프로세서(303)는, 패킷 및/또는 프레임을 처리하기 위해서 TLE(301) 장치, QME(305) 장치 및 BME(315) 장치를 모두 이용하며, 집합적으로 본 명세서에서는 패킷 프로세서로 명명될 것이다. 그러나, 패킷 프로세서는 패킷뿐만 아니라 임의의 다른 데이터 스트림을 처리하는데 이용될 것이며, 범용 비트/니블(nybble)/바이트/또는 (패브릭 프로세서의 경우) 32-비트 워드 스트림 프로세서로 간주될 수 있음이 지적되어야 한다.
DCP(203)의 모든 처리 구성요소는 프로그래밍 가능하다. 채널 프로세서(307)는, 다른 종류의 매체 패킷, 전송 패킷 및 전송 패킷 페이로드를 처리하도록 개별적으로 프로그래밍 가능하며, 패브릭 프로세서(303)는 다른 스위칭 장치에 사용된 데이터를 처리하도록 프로그래밍 가능하다. 테이블 저장매체(207)의 테이블은 판독될 뿐만 아니라 기록될 수 도 있으며, 테이블 룩업 엔진(301)은 테이블 상의 다른 종류의 룩업을 수행하도록 프로그래밍될 수 도 있다. 큐 관리 엔진(305)은 다른 개수의 큐를 설정하고, 큐에서의 다른 크기의 설명자를 이용하도록 프로그래밍될 수 도 있으며, 버퍼 관리 엔진(315)은 풀(pool) 내의 다른 버퍼 크기로 다른 크기의 풀을 버퍼링하도록 프로그래밍될 수 도 있다. 실행 프로세서(313)는, 결국 범용 프로세서이며, 임의의 기능을 수행하도록 프로그래밍될 수 도 있다. 구성요소를 위한 프로그램은, DCP(203)가 초기화될 때 로딩된다. 프로그램 코드는, 외부 호스트(227)에 의해 SDRAM(229)으로 로딩될 수 도 있거나, BME(315)에 의해 관리되는 어드레스 공간의 부분인 외부 PROM에 저장될 수 도 있다. 두 경우 중 어느 한 경우에, 실행 프로세서(313)는 코드를 구성요소의 메모리에 로딩한다.
디지털 통신 프로세서(203)의 버스 및 메모리 구조는 DCP(203)가 패킷 스위칭의 속도 및 시간 제약을 만족시키는 것이 가능하게 하면서, 테이블 룩업 엔진(301), 큐 관리자 엔진(305) 및 버퍼 관리 엔진(315)을 공유된 자원으로 이용한다. 테이블 룩업 엔진(301) 이외의 디지털 통신 프로세서(203)의 모든 구성요소는 단일 글로벌 어드레스 공간(321)을 공유한다. 패킷 프로세서 각각은 글로벌 어드레스 공간(321)내에 각자 자신의 로컬 메모리를 가지며, BME(315) 및 QME(305)에 속하는 메모리 뿐만 아니라 글로벌 어드레스 공간(321)에 속하는 로컬 메모리를 갖는 다른 패킷 프로세서의 로컬 메모리에 액세스할 수 있다. 패킷 프로세서 각각은 각자 자신의 로컬 메모리에 대해 직접 액세스를 하며, 32-비트 글로벌 버스(319)를 통해서 다른 구성요소의 로컬 메모리에 대해 액세스를 한다. 추가로, 패브릭 프로세서(303)는 큐 관리 엔진(305)에 대한 각자 자신의 경로(304)를 갖는다.
도 5는 글로벌 어드레스 공간(321)의 개요를 제공한다. 먼저, 채널 프로세서{307(0..15)}의 로컬 메모리(501)로 이루어진 글로벌 어드레스 공간의 부분(504)이 있다. 부분(504)은 채널 프로세서의 클러스터(309) 각각을 위한 클러스터 메모리(503)로 더 세분된다. 주어진 채널 프로세서{307(i)}는 각자 자신의 로컬 메모리{501(i)}에 가장 빠른 액세스를 가지며, 함께 자신의 클러스터 메모리(503)를 구성하는, 자신의 클러스터내의 다른 채널 프로세서의 로컬 메모리에 대해 그 다음으로 빠른 액세스를 가지며, 글로벌 어드레스 공간(321)의 나머지 부분에 대해 가장 느린 액세스를 갖는다. 자신의 로컬 메모리가 글로벌 어드레스 공간(321)의 일부분인 다른 구성요소는 패브릭 프로세서(303)(로컬 메모리는 505에서 볼 수 있음), QME(305)(로컬 메모리는 507에서 볼 수 있음), BME(315)(로컬 메모리는 513에서 볼 수 있음) 및 실행 프로세서(313)(로컬 메모리는 517에서 볼 수 있음)이다. 글로벌 어드레스 공간을 공유하는 프로세서는, 일반적으로 프로세서간 통신을 위해 글로벌 어드레스 공간을 이용할 수 있으며, 예를 들어, 프로세서는 자신들의 동작을 조정하기 위해서 글로벌 어드레스 공간에서 세마포어(semaphores)를 설정할 수 있다. 이러한 세마포어를 만들고, 이용하기 위해서, 바람직한 실시예의 프로세서는 테스트 앤드 세트(test-and-set) 비트 지시를 갖는다. 글로벌 어드레스 공간에서 이용 가능한 다른 정보는 QME 로컬 메모리(507)에서의 큐 상태 정보(505), 버퍼 관리 엔진 로컬 메모리(513)에서의 버퍼 상태 정보(515), 및 XP 로컬 메모리(517) 내의 글로벌 구성 레지스터(519) 및 시스템 인터페이스 구성 정보(521)를 포함한다. 결국, QME(305)는 패킷 프로세서에 의해 판독된 큐에 대한 큐 상태 정보를 패킷 프로세서의 로컬 메모리에 기록한다.
계속해서 도 3에서, 구성요소의 로컬 메모리 각각은 페이로드 버스(317)에 의해 버퍼 관리 엔진(315)에 연결된다. SDRAM(229) 및 다른 구성요소 사이에서 64바이트까지의 데이터를 전송하기 위해서 4-주기 버스트(burst)로 동작하는 것은 128-비트 폭 버스이다. 페이로드 버스(317)를 통해 전송된 데이터는 다음과 같은 것을 포함한다.
ξ실행 프로세서(313)에 의해 이용된 프로그램 및 데이터.
ξ실행 프로세서(313)가 DCP(203)를 구성하기 위해서 이용하는 데이터.
ξSDRAM(229)과 패킷 프로세서 사이에 전송되고 있는 프로토콜 데이터 유닛.
ξ버퍼 태그(233).
ξ패킷 프로세서에 의해 인큐되고 디큐되는 설명자.
SDRAM(229)과 로컬 메모리 사이의 전송은 직접 메모리 액세스(DMA : Direct Memory Access) 메커니즘에 의해 이뤄진다. 전송을 수행하는 구성요소는 DMA 메커니즘으로의 전송을 위해서 DMA 지시를 제공하고, DMA 메커니즘은 구성요소로부터 추가적인 간섭없이 전송을 수행한다. 이러한 배열은 프로토콜 데이터 유닛의 전송과 구성요소에 의한 다른 처리가 병렬로 발생하게 하며, 이것은 DCP(203)의 동작 속도 및 처리량을 매우 증가시킨다.
테이블 룩업 엔진(301) 및 패킷 프로세서는 링 버스(311)를 통해서 모두 연결된다. 링 버스(311)는 64 비트 폭을 가지며, 자신이 연결하는 노드 사이에서 시간-멀티플렉싱(time-multiplexing)된다. 임의의 주어진 순간에, 이러한 구성요소 각각은, 자신에 할당된 1개 내지 5개 사이의 링 버스 슬롯을 갖는다. 각 슬롯은 64-비트 메시지를 운반할 수 있다. 버스가 자신의 노드 사이에서 시간-멀티플렉싱되고, 각 노드는 사전에 결정된 최대 개수의 슬롯을 가지기 때문에, 메시지가 한 노드로부터 고정된 시간 내에 링 버스(311)상의 다른 노드로 이동하는 것을 보장할 수 있을 것이다. 현재의 바람직한 실시예에서, 실행 프로세서(313)는 테이블 저장매체(207)에서의 테이블을 구성하고 판독하기 위해서 링 버스 메시지를 이용하며, 패킷 프로세서는 변환을 위해 정보를 테이블 룩업 엔진(301)에 제공하기 위해서 링 버스 메시지를 이용하며, 테이블 룩업 엔진(301)은 변환의 결과를 패킷 프로세서에 제공하기 위해서 링 버스 메시지를 이용한다. 링 버스(311)에 연결된 임의의 장치는 링 버스 메시지를 링 버스(311)에 연결된 임의의 다른 장치에 전달하고, 이들 링 버스 메시지를 이들 임의의 다른 장치로부터 수신할 수 있으며, 다른 실시예에서, 링 버스 메시지는, 예컨대 클러스터(309)를 이루는 채널 프로세서(307)의 활동을 조정하는데 이용될 수 있다.
DCP(203)의 구성요소들의 협동의 예
도 3에 의해 제공된 상세한 사항의 레벨로 도 1 및 도 2의 예를 계속 다루어보면, ATM 패킷의 스트림은 입력 라인{204(i)} 상에서 수신되고 있다. 입력 라인{204(i)}은 채널 프로세서{307(i)}에 속해있다. ATM 패킷이 도달함에 따라, 채널 프로세서{307(i)}는, 먼저 패킷을 채널 또는 이로부터 프로세서{307(i)}의 로컬 메모리에 전송하고, 그런 다음 이 패킷을 채널 프로세서{307(i)}의 소유인 버퍼 태그(233)에 의해 명시된 버퍼(231)에 전송하는 일련의 DMA 전송을 시작한다. 이러한 절차가 진행되는 동안, 채널 프로세서{307(i)}는 IP 패킷을 위한 ATM 패킷의 페이로드를 조사한다. IP 패킷의 시작을 발견할 때, 채널 프로세서{307(i)}는 IP 패킷 헤더로부터 IP 패킷을 위한 목적지 어드레스를 추출하여, 테이블 룩업 엔진(301)을 위한 목적지 어드레스를 포함하는 메시지를 만든다. 이 경우, 목적지 어드레스는 이더넷 LAN{105(a)}에 연결된 장치{107(n)}상의 IP 노드{109(n)}를 명시한다. 이더넷 LAN{105(a)}은 직렬 출력{206(j)}으로부터 패킷 출력을 수신한다. 그런 다음, 채널 프로세서{307(i)}는 메시지를 링 버스(311)에 있는 자신의 슬롯중 하나에 위치한다. 채널 프로세서{307(i)}가, 장치{107(n)}의 이더넷 어드레스와 직렬 출력{206(j)}에 의해 제공되는 큐의 번호(m)를 가지는 메시지에 대한 응답을 수신할 때, 채널 프로세서(307(i)}는 적어도 이더넷 어드레스와 버퍼의 버퍼 태그(233)를 포함하는 설명자{217(k)}를 만든다. 그런 다음, 채널 프로세서{307(i)}는 페이로드 버스(317)를 통해서 인큐 명령을 채널 프로세서{307(i)}에 속한 메일박스에 기록한다. 인큐 명령은 적어도 설명자{217(k)}와 큐 번호(m)를 포함한다. 큐 관리 엔진(305)은, 설명자{217(k)}를 큐{215(m)}의 테일(221)에 놓음으로써 이러한 명령에 응답한다.
직렬 출력{206(j)}은 채널 프로세서{307(j)}에 속하며, 큐 관리 엔진(305)은 큐{215(m)}의 헤드(219)로부터의 설명자를 채널 프로세서{307(j)}에 제공한다. 큐 관리 엔진(305)은, 큐{215(m)}를 명시하는 디큐 명령을 페이로드 버스(317)를 통해서 자신의 메일박스에 기록하여 이것을 수행한다(does so). 큐 관리 엔진(305)은, 큐{215(m)}의 헤드(219)에 있는 설명자(217)를 페이로드 버스(317)를 통해서 채널 프로세서{307(j)}에 제공함으로써 디큐 명령에 응답한다.
결국, 큐{215(m)}의 헤드(219)에 있는 설명자(217)는 설명자{217(k)}가 된다. 일단 채널 프로세서{307(j)}가 설명자{217(k)}를 가지게 되면, 채널 프로세서{307(j)}는, IP 패킷을 포함하고 있는 버퍼(231)로부터 채널 프로세서{307(i)}의 로컬 메모리로의 IP 패킷의 DMA 전송을 시작하기 위해서 설명자{217(k)}의 버퍼 태그(233)를 이용한다. IP 패킷이 도착할 때, 채널 프로세서{307(j)}는 이더넷 장치{107(n)}에 어드레싱되고 IP 패킷을 자신의 페이로드로써 갖는 이더넷 전송 패킷의 스트림을 만들며, 이더넷 패킷의 스트림을 직렬 출력{206(j)}에 출력한다. 물론, 패킷에서의 이더넷 어드레스는 설명자{217(k)}로부터 얻는다.
DCP(203)의 버스 및 메모리 구조의 이점
전술한 설명으로부터 명백해진 바와 같이, DCP(203)의 버스 및 메모리 구조는 패킷 프로세서가 패킷 헤더 처리, 프로토콜 데이터 유닛 전송 및 병렬로 인큐잉(enqueueing) 및 디큐잉(dequeuing)을 수행하게 하며, 게다가 다른 버스는 다른 경로를 제공할 뿐만 아니라 그러한 다른 버스를 통해 수행되는 동작의 회전 지연시간 요구조건(latency requirements)을 충족하는 경로를 제공한다. 따라서, 가장 시간에 민감한 동작(the most time-sensitive operation)은, 경로지정이 변환의 결과가 이용가능하게 될 때까지 이뤄질 수 없으므로, 패킷 헤더에서의 정보의 변환이다. 패킷 프로세서 각각은 링 버스(311)내에 슬롯을 갖기 때문에, 각 패킷 프로세서는 보증된 시간내에서 테이블 룩업 엔진(301)에 액세스하며, 따라서, 변환에 대한 시간 제한은 만족될 수 있다.
패킷 프로세서와 SDRAM(229) 사이의 프로토콜 데이터 유닛의 전송은, 한편 높은 대역폭의 버스트(burst)를 요구하며, 이러한 높은 대역폭의 버스트는 로컬 메모리와 SDRAM(229) 사이의 페이로드 버스(317)를 통한 DMA 전송에 의해 제공된다. 버퍼 관리 엔진(315)과 채널 프로세서{307(i)}로부터의 버퍼 태그의 전송 및 큐 관리 엔진(305)과 채널 프로세서{307(i)} 사이의 설명자의 전송은 또한 시간이 중요한 변수이며(time-critical), 그래서 이들 전송은 또한 페이로드 버스(317)를 통해서 이뤄진다.
시간이 중요한 변수가 아닌(less time-critical) 동작은 글로벌 어드레스 공간(321)에서 판독 및 기록으로서 수행될 수 있다. 이러한 판독 및 기록에 요구되는 시간은, 이들이 글로벌 어드레스 공간중 어디에 있느냐에 의존한다. 시간은, 글로벌 어드레스 공간의 주어진 프로세서 자신의 로컬 부분에 대한 판독 및 기록일 경우에 가장 짧고(least), 주어진 프로세서의 클러스터(309)에 속한 프로세서에 대한 판독 및 기록일 경우에 그 다음으로 짧고, 주어진 프로세서의 클러스터(309)에 속하지 않은 프로세서에 대한 판독 및 기록일 경우에 가장 길다.
TLE(301)이외의 DCP(203)의 모든 프로세서가 글로벌 어드레스 공간(321)을 공유한다는 사실은 프로세서간 통신을 쉽게 한다. 예를 들면, 실행 프로세서(313)는, 단지 데이터를 글로벌 어드레스 공간(321)내의 다른 구성요소들의 영역에 기록함으로써 이들 구성요소를 초기화하고/하거나 재구성할 수 있으며, 패킷 프로세서(307)는, 큐 관리 엔진(305)에 의해 관리되고 있는 큐(215), 버퍼 관리 엔진(315)에 의해 관리되고 있는 버퍼(231)에 대한 상태 정보 또는 자신의 클러스터(309)내의 다른 패킷 프로세서의 상태를, 이들 장치들에 속한 글로벌 어드레스 공간의 영역으로부터 상태 정보를 판독함으로써 얻을 수 있으며, 프로세서들은 글로벌 어드레스 공간내의 세마포어에 의해 자신들의 행위를 조정할 수 있다. 수신 패킷 프로세서는, 자신이 수신한 프로토콜 데이터 유닛을 이 프로토콜 데이터 유닛을 출력하는 전송 패킷 프로세서의 로컬 메모리에 직접 기록하기 위해서 일부 응용에서 글로벌 어드레서 공간을 더 이용할 수 있다. 실행 프로세서(313)는, 결국 실행 프로세서(313)와 글로벌 어드레스 공간을 공유하는 프로세서들 각자의 상태를 결정하기 위해서 글로벌 어드레스 공간을 이용할 수 있다.
글로벌 어드레스 공간 동작이 매우 빈번한 경우에, 특수한 하드웨어 지원이 제공된다. 예를 들면, 패브릭 프로세서(303)는 큐 관리 엔진(305)의 글로벌 어드레스 공간에 대한 자기 자신만의 전용 액세스를 가지며, 따라서 글로벌 버스(319)에 의존하지 않고 큐 상태 정보를 얻을 수 있다. 유사하게 각 패킷 프로세서는 QME(305)의 메일박스에 대한 상태 비트를 글로벌 어드레스 공간의 자신의 영역에서 갖는다. 이러한 비트는, 각 패킷 프로세서가 글로벌 버스(319)에 의존하지 않은 채 자신의 메일박스의 상태를 결정할 수 있도록 큐 관리 엔진(305)에 직접 전송된다.
패킷 프로세서에 대한 상세한 설명
다음의 부분은 먼저 채널 프로세서{307(0..n)}를 상세하게 설명하고, 그런 다음 패브릭 프로세서(303)를 설명하며, 마지막으로 실행 프로세서(313)를 설명할 것이다.
채널 프로세서{307(i)}에 대한 개요 : 도 4 및 도 6
도 4는 채널 프로세서{307(i)}의 구성요소에 대한 블록도이다. 도 3에서 보았던 바와 같이, 채널 프로세서{307(i)}는 직렬 입력{204(i)}을 통해서 직렬 패킷 입력을 수신하며, 직렬 출력{206(i)}을 통해서 직렬 패킷 출력을 제공하며, 링 버스(311)에 연결되며, 링 버스(311)에 슬롯을 가지며, 페이로드 버스(317) 및 글로벌 버스(319)에 연결된다. 군집 경로(433 및 435)와 클러스터 경로(437 및 439)는, 매우 고속의 전송 매체를 다루기 위해서 채널 프로세서{307(i)}가 자신의 클러스터(309)내의 다른 채널 프로세서(307)와 함께 군집화되게 한다.
상위 레벨에서, 채널 프로세서{307(i)}는 세 개의 구성요소{채널 프로세서 리스크 코어(CPRC : Channel Processor Risc Core)(401), 직렬 데이터 프로세서(SDP : Serial Data Processor)(420) 및 DMA 엔진(411)}를 가지며, 이때, 채널 프로세서 리스크 코어(CPRC)(401)는 다른 구성요소의 동작을 제어하며, 글로벌 어드레스 공간(321)에 대한 액세스를 갖는 범용 프로세서이며, 직렬 데이터 프로세서(SDP)(420)는 직렬 입력{204(i)}으로부터 패킷을 수신하고, 직렬 출력{206(i)}에 패킷을 출력하는데 포함되는 처리를 수행하며, DMA 엔진(411)은 채널 프로세서{307(i)}와 BME(315) 또는 QME(305) 사이의 글로벌 버스(317)를 통한 데이터 전송을 다룬다. SDP(420) 및 CP RISC 코어(401) 모두는 링 버스 인터페이스(415)를 통해서 링 버스(311)에 연결된다. SDP(420)는 두 개의 하위 구성요소 즉, 인입 패킷을 처리하는 RxSDP(421)와, 발신 패킷을 처리하는 TxSDP(427)를 갖는다.
계속해서 CPRC(401)에 대해 상세하게 설명하면, CPRC(401)는 충분히 공지된 MIPS1 지시 세트의 서브세트를 사용하는 범용 마이크로프로세서이다. 이것은 링 버스(311) 상에 메시지를 전달하고 수신할 수 있으며, SDP(420)와 두 개의 레지스터 파일을 공유할 수 있다. 추출 공간(417)은, CPRC(401)가 이용하기 위해서 SDP(420)에 의해 인입 패킷으로부터 추출된 프로토콜 데이터를 저장하는 반면, 병합(merge) 공간(419)은 발신 패킷을 만드는데 이용하기 위해서, CPRC(401)에 의해 제공된 프로토콜 데이터를 SDP(420)에 저장하는데 이용된다.
CPRC는 네 개의 컨텍스트, 즉 레지스터 파일의 독립 세트를 갖는다. CPRC(401)는, 프로그램에서의 BREAK 명령에 응답하거나, 하드웨어 인터럽트에 응답하여 컨텍스트 사이를 스위칭할 수 있다. 컨텍스트에는 컨텍스트의 번호에 따라 우선순위가 정해진다{컨텍스트(0)가 가장 높은 우선순위를 가지며, 컨텍스트(3)가 가장 낮은 우선순위를 갖는다}. 각 컨텍스트는 컨텍스트 엔트리 레지스터와 컨텍스트 반환 레지스터를 가지며, 컨텍스트가 바뀔 때, 현재의 컨텍스트에서 실행되는 다음 지시의 어드레스는 현재 컨텍스트의 컨텍스트 반환 레지스터에 저장되고, 새로운 컨텍스트의 컨텍스트 엔트리 레지스터에 저장된 어드레스에 있는 지시로 계속 실행된다.
컨텍스트 스위칭을 야기하는 다섯 가지의 시스템 이벤트가 있다.
ξ마스터 리셋(master reset)
ξ마스크가 불가능한 인터럽트(non-maskable interrupt)
ξ디버그 인터럽트(debug interrupt)
ξ사용자 인터럽트1(user interrupt 1)
ξ사용자 인터럽트2(user interrupt 2)
마스터 리셋 이벤트 및 디버그 인터럽트 이벤트를 위한 컨텍스트 엔트리 레지스터의 설정은 시스템 정의(system-defined)되며, 다른 이벤트의 경우, 컨텍스트 엔트리 레지스터의 설정은 프로그램 가능하다.
지시 메모리(403)는 CPRC(401)에 의해 실행하기 위한 코드를 포함한다. 이들 코드는, CP{307(i)}가 속한 클러스터(309)내의 다른 CP(307)의 CPRC와 CPRC(401)에 의해서만 판독되고 기록될 수 있다. 바람직한 실시예에서, 코드는 다음과 같은 절차에 따라서 IMEM(403)으로 로딩된다. 먼저, 실행 프로세서(313)는 이 코드를 글로벌 버스(319)를 통해서 DMEM(407)에 로딩하며, CPRC(401)는 이 코드를 DMEM(407)으로부터 IMEM(403)으로 전송한다.
DMEM(405)은 채널 프로세서{307(i)}의 로컬 데이터 메모리이다. 이것은 CPRC(401)에 의한 로컬 저장 및 페이로드 버스(413)를 통해 데이터에 DMA하기 위해 이용된다. DMEM(405), 추출 공간(417) 및 병합 공간(419)은 모두 글로벌 어드레스 공간(321)의 부분이며, 채널 프로세서{307(i)}의 클러스터(309) 내의 다른 채널 프로세서(307)와 DCP(203)의 다른 프로세서에 글로벌 버스(317)를 통해서 액세스 가능하다. 바람직한 실시예에서 이러한 배열을 구현하는 DMEM(405) 이외의 메모리 구성요소는 요청 FIFO(request FIFO)(406), 멀티플렉서(407) 및 글로벌 버스 인터페이스(413) 및 페이로드 버스 인터페이스(411)이다. 멀티플렉서(407)는 RxSDP(421), TxSDP(427), 페이로드 버스 인터페이스(411) 및 요구 FIFO(406)에 대한 액세스를 멀티플렉싱한다. 차례로, 요구 FIFO(406)는, 글로벌 버스(319)에 연결된 CCP(203) 내의 다른 프로세서의 DMEM(405)으로의 액세스, CPRC(401)에 의한 DM(405)과 글로벌 어드레스 공간(321)으로의 액세스 및 CP{307(i)}의 클러스터(309)에 있는 채널 프로세서(307) 내의 다른 CPRC(401)에 의한 DMEM(405)으로의 액세스를 허용한다. 멀티플렉서(407), DMEM(405) 및 페이로드 버스 인터페이스(411)는 함께 DMA 엔진(441)을 구성하며, 이 DMA 엔진(441)은 SRAM(229)과 CPRC(401) 및 SDP(420) 사이의 페이로드 버스(317)를 통해서 DMA 동작을 수행한다.
상기 배열에 의해 암시된 바와 같이, RxSDP(421), TxSDP(427) 및 페이로드 버스 인터페이스(411)는 DMEM(411)에 대한 제 1 액세스 우선권을 가지는 반면, 글로벌 버스 인터페이스(413), CPRC(401) 및 다른 CPRC(401)는 남은 액세스를 위해 경쟁해야 한다. 따라서, 배열은, 한편으론 SDP(420)와 DMEM(405) 사이와, 다른 한편으론 DMEM(405) 및 SDRAM(229) 사이에서의 프로토콜 데이터 유닛의 DMA 전송에 제 1 우선순위를 준다.
계속해서 직렬 데이터 프로세서(420)의 구성요소에 대해 상세하게 설명하면, RxSDP(421)는 인입 패킷 스트림을 처리하도록 특수화된다. 이것은 인입 스트림으로부터 프로토콜 데이터를 포함하는 필드를 추출하며, 필드의 내용을 링 버스 인터페이스(413)를 통해서 링 버스(311)에 제공하거나 추출 공간(417)을 통해서 CPRC(401)에 제공한다. 이것은 프로토콜 데이터 유닛을 패킷 스트림으로부터의 DMA 전송을 통해서 DMEM(405)에 제공한다. RxSDP(421)는 세 개의 주 하위 구성요소{핀 로직(pin logic)(443), 프레임 지원 프로세서(framing support processor)(407), 바이트 프로세서(453)}를 가지며, 핀 로직(443)은 전송 매체 내의 패킷 스트림을 나타내는 물리적인 신호를 수신하며, 프레임 지원 프로세서(407)는 매체 패킷과 전송 패킷을 패킷 스트림에 위치하며, 바이트 프로세서(453)는 전송 패킷과 이들의 페이로드로부터 프로토콜 정보를 추출하며, 전송 패킷을 경로(425)를 통해서 DMEM(405)에 전달한다. 바이트 프로세서(451)는 추출된 프로토콜 정보를 추출 공간(417)에 위치하고/하거나 이 정보를 링 버스 인터페이스(415)를 통해서 링 버스 메시지에 위치할 수 있다.
TxSDP(427)는, 자신이 DMA를 통해서 DMEM(405)으로부터 얻은 프로토콜 데이터 유닛을 운반하는 발신 전송 패킷의 스트림을 생성하기 위해서 특수화된다. 이를 위해서, TxSDP(427)는 CPRC(401)가 병합 공간(419)에 놓았던 프로토콜 데이터를 프로토콜 데이터 유닛과 병합시킨다. TxSDP(427)의 구성요소는 기능적으로 RxSDP(421)의 구성요소와 비교될 수 있다. 따라서, 바이트 프로세서(453)는 전송 패킷과 이들의 페이로드 내의 프로토콜 데이터를 조작하며, 프레임 지원 프로세서(449)는 매체 패킷에 필요한 프로토콜 정보를 제공하며, 핀 로직(445)은 데이터를, 이들이 출력되고 있는 물리적인 매체에 필요한 형태로 놓는다.
SDP(420)의 더 흥미로운 특징은 재 순환경로(441)와, 군집 경로(433 및 435)이다. 재 순환경로(441)는 더 처리하기 위해서 DMEM(405)에 저장된 패킷이 RxSDP(421)에 반환되게 하고, DMEM(405)에 출력되게 한다. 군집 경로(433)는 클러스터(309) 내의 모든 RxSDP(421)가 동일한 입력 데이터를 수신하게 하며, 군집 경로(435)는 TxSDP(427)가 출력을 위한 데이터를 CP{307(i)}가 속한 클러스터의 다른 CP(307)내의 TxSDP로부터 수신하게 한다.
채널 프로세서(307)의 동작예 : 도 25
도 25는, 어떻게 수신 채널 프로세서{307(i)}가, 수신 채널 프로세서{307(i)}에 속한 입력{204(i)}에서 전송 패킷의 시퀀스를 포함하는 매체 패킷의 스트림을 수신하고, 페이로드가 채널 프로세서{307(i)}에서 수신된 전송 패킷의 페이로드인 전송 패킷의 시퀀스를 포함하는 매체 패킷의 시퀀스를 송신 채널 프로세서{307(j)}에 속한 출력{206(j)}에 출력하기 위해서 송신 채널 프로세서{307(j)}와 협력할 수 있는 지를 도시한다. 수신된 매체 패킷 및 송신된 매체 패킷과 전송 패킷은 물론 다른 프로토콜에 속할 수 있다.
수신된 매체 패킷은 채널 프로세서{307(i)}의 RxSDP(421)에서 수신된다. RxSDP(421)는, 전송 패킷으로부터 프로토콜 데이터 유닛을 추출 공간(417)으로 추출하고, 전송 패킷으로 이루어진 프로토콜 데이터 유닛을 DMEM(405) 및 BME(315)로 페이로드 버스(317)를 통해 DMA하며, BME(315)는 이 프로토콜 데이터 유닛을 SDRAM(229)내의 버퍼(231)에 놓으며, 이 SDRAM(229)에서 프로토콜 데이터 유닛은 2503으로 도시된다. 한편, 채널 프로세서{307(i)} 내의 CPRC(401)는 설명자(217)를 만들기 위해서 프로토콜 데이터를 이용하며, 이 설명자는 페이로드 버스(317)를 통해서 인큐하기 위해서 QME(305)에 전달된다{프로토콜 데이터의 일부를 변환을 위해서 링 버스(311)를 통해서 TLE(301)로 전달하는 것은 여기에 도시되지 않았다}. CPRC(401)가 인큐될 설명자(217)를 전달할 때, CPRC(401)는 이 설명자(217)가 헤드가 전송 채널 프로세서{307(j)}에 의해 판독되고 있는 큐(215)의 테일에서 인큐됨을 명시한다. QME(305)는 설명자(207)를 명시된 큐(215)의 테일에서 인큐한다.
채널 프로세서{307(j)}가 설명자(207)를 큐(215)의 헤드로부터 디큐할 때, QME(305)는 이 설명자를 페이로드 버스(317)를 통해서 채널 프로세서{307(j)}로 전달한다. 채널 프로세서{307(j)}는, 출력되는 패킷 스트림에 대한 프로토콜 데이터를 만들기 위해서 설명자(207)를 이용하며, 이 프로토콜 데이터를 병합 공간(419)에 놓는다. 그런 다음, 채널 프로세서{307(i)}는, 프로토콜 데이터 유닛(2503)을 SDRAM(229) 내의 버퍼(231)로부터 페이로드 버스(317)와 DMEM(405)을 통해서 직렬 데이터 프로세서(420)에 전송하는 DMA 동작을 개시한다. 직렬 데이터 프로세서(420)에서, TxSDP(427)는 출력{206(j)}을 위한 매체 패킷(2505) 스트림을 생성하는데 필요한 프로토콜 데이터를 추가하며, 출력{206(j)}은 204(i)에서 수신된 패킷으로부터의 프로토콜 데이터 유닛(2503)을 가지고 있다(carry).
로컬 메모리(501)에 대한 상세한 설명 : 도 6
도 6은 채널 프로세서{307(i)}를 위한 로컬 메모리{501(i)}를 도시한다. 앞에서 지시된 바와 같이, 로컬 메모리{501(i)} 모두는 글로벌 어드레스 공간(321)을 공유하는 디지털 통신 프로세서(203)의 구성요소중 임의의 구성요소에 의해 판독되거나 기록될 수 있다.
데이터 스코프{625(0) 및 625(1)}
앞에서 기술된 바와 같이, RxSDP(421)는 인입 패킷 스트림을 SDRAM(229)으로 DMA하며, 이처럼 DMA할 때, 프로토콜 데이터를 인입 패킷 스트림으로부터 추출하며, 이 프로토콜 데이터를 처리하기 위해서 CPRC(401)에 제공하며, 반면 TxSDP(421)는 SDRAM(229)으로부터 발신 프로토콜 데이터 유닛을 수신하며, 이처럼 수신할 때, CPRC(401)로부터 프로토콜 데이터를 수신하여, 이 프로토콜 데이터를 발신 패킷 스트림의 적당한 장소에 놓는다. 주어진 전송 패킷에 대해서, 처리는 두 단계를 포함한다. 인입 패킷의 경우에, 이들 두 단계는 다음과 같다.
ξ프로토콜 데이터를 추출하고, 이 프로토콜 데이터 유닛을 SDRAM(229)으로 DMA하는 단계와,
ξ이 프로토콜 데이터를 CPRC(401)에서 처리하는 단계이다.
채널 프로세서(307)에서, 이들 두 단계는 파이프라인(pipeline)된다. 인입 패킷 스트림의 경우에, CPRC(401)가 이전의 프로토콜 데이터 유닛으로부터 추출된 프로토콜 데이터를 처리하는 반면, RxSDP(421)는 프로토콜 데이터를 패킷 스트림으로부터 추출하여, 이 패킷 스트림으로부터 현재의 프로토콜 데이터 유닛에 DMA한다. 송신은 동일한 방식으로 다루어지며, TxSDP(421)는 현재의 프로토콜 데이터 유닛을 송신하는 반면, CPRC(401)는 그 다음의 프로토콜 데이터 유닛에 포함되는 프로토콜 데이터를 처리한다.
파이프라이닝(pipelining)은 데이터 스코프(scope){625(0) 및 625(1)}에 의해 구성될 수 있다. 이들은 CPRC(401)에 지각될 수 있고, CPRC(401)에 의해 액세스될 수 있으며, SDP(420)의 동작과 CPRC(401)와 SDP(420) 사이의 상호작용을 제어하는 데이터 구조이다. 주어진 데이터 스코프{625(i)}는 데이터 스코프 레지스터(624)의 한 세트와 데이터스코프 이벤트 레지스터(632) 내의 플래그{632(i)}의 한 세트를 포함한다. 데이터 스코프 레지스터(624)는 또한 Tx 데이터 스코프(641)와 Rx 데이터 스코프(643)로 이루어진다. Rx 데이터 스코프(643)는 제 1 단계 도중에 입력 패킷 스트림으로부터 RxSDP(421)에 의해 추출된 프로토콜 데이터를 수신하고, CPRC(401)는 제 2 단계에서 프로토콜 데이터를 처리하며; 마찬가지로, Tx 데이터 스코프(643)는 제 1 단계 도중에 발신 패킷을 위해 CPRC(401)가 처리하는 프로토콜 데이터를 수신하고, TxSDP(427)는 제 2 단계 도중에 Tx 데이터 스코프(643)로부터의 프로토콜 데이터를 출력한다.
패킷 처리의 파이프라이닝을 준비하는 것에 덧붙여, 데이터 스코프(625)는 또한, CPRC(401) 상에서 실행되는 프로그램을 위한 일정한 인터페이스를, SDP의 RxSDP(421)에 의해 현재 수신되거나 TxSDP(427)에 의해 현재 송신되고 있는 패킷의 스트림에 제공한다. 스트림의 추가의 처리가 필요한 애플리케이션에 있어서, 데이터 스코프의 총 수는 증가될 수 있다. 예컨대, 입력 스트림 처리, DMEM(405)에서 최종 PDU의 저장, 그 후 DMEM(405)에 저장된 PDU를 다시 처리하기 위한 재순환 경로(441)의 사용, 및 그 후 SDRAM(229)에 대한 최종 PDU의 DMA 처리를 포함하는 RxSDP 처리는 4 개의 데이터 스코프를 포함할 수 있다.
CPRC(401) 상에서 실행되는 프로그램은 어느 데이터 스코프가 SDP(420)에 의해 현재 사용되는 지를 결정한다. SPD(420)가 데이터 스코프{625(0)}로부터 프로토콜 데이터를 추출하고, 여기에 프로토콜 데이터를 병합하는 동안, CPRC(401)는 데이터 스코프{621(1)}에서 프로토콜 데이터를 처리한다. SDP(420)가 데이터 스코프{625(0)}와 함께 행해질 때, SDP(420)는 CPRC(401)에 신호를 출력하고, CPRC(401)는 SDP(420)가 데이터 스코프{625(1)} 위에서의 작업을 시작할 수 있도록, 데이터 스코프{625(0)}를 설정하여 데이터 스코프{621(0)} 상에서 자신을 동작시키는 것을 개시할 수 있게 된다.
데이터 스코프{625(i)}의 내용에 대해 보다 상세하게 계속하면, Rx 데이터 스코프(643)는 추출 레지스터(601), RxCB(633) 및 Rx 상태(635)를 포함하는데, 상기 레지스터는 RxSDP(601)가 추출한 프로토콜 정보를 포함하고, 상기 RxCB(633)는 RxSDP(421)에 의해 현재 수신되고 있는 패킷을 SDRAM(229)에 대해 DMA 처리하기 위해 필요한 정보를 포함하고, 상기 Rx 상태(635)는 동작 중인 패킷을 DMA 처리하는 것을 종료하였는 지의 여부를 포함하여 RxSDP(421)에 대한 상태 정보를 포함한다. Tx 데이터 스코프(641)는 패킷 송신을 위한 아날로그 레지스터를 포함한다. 병합 레지스터(603)는 발신 패킷과 병합될 프로토콜 데이터를 포함하고, TxCB(633)는 SDRAM(229)으로부터 TxSDP에 의해 송신되고 있는 패킷을 DMA처리하기 위해 필요한 정보를 포함하며, Tx 상태는 동작 중인 패킷에 대해 종료하였는 지 여부를 포함하여, TxSDP(427)에 대한 상태 정보를 포함한다.
제어 블록 레지스터(611)
제어 블록 레지스터(611)는 CPRC(401)와 SDRAM(229) 사이의 DMA 전달을 제어하는 4개 레지스터로된 한 세트이다. WrCB(610)는 CPRC(401)로부터 SDRAM(229)에 대한 DMA 전달을 제어하고, RdCB는 CPRC(401)에 대한 DMA 전달을 제어한다.
링(Ring) 버스 제어 레지스터(617)
이들 레지스터는 링 버스 인터페이스(415)의 부분이다. 이들은 RxSDP(421)와 CPRC(401)가 링 버스 상에서 메시지를 전달하고, CPRC(401)가 링 버스 상에서 메시지를 수신하는 것을 허용한다. 메시지를 전달하기 위한 4개의 레지스터와, CP{307(i)}에 의해 전달된 메시지에 대한 응답을 수신하기 위한 8개의 레지스터 및 요구되지 않은(unsolicited) 메시지를 수신하기 위한 한 큐(queue)의 레지스터가 존재한다.
SONET 오버헤드(overhead) 비트(612)
이 레지스터는 CP{307(i)}에 의해 출력되고 있는 SONET 패킷을 위한 SONET 오버헤드 비트를 포함한다.
RxSDP 제어(613) 및 TxSDP 제어(615)
이들 레지스터는 RxSDP(421) 및 TxSDP(427)의 동작을 각각 제어하는 파라미터를 포함한다.
CP 모드 레지스터(625)
이 레지스터는 CP{307(i)}의 동작을 제어하는 파라미터를 포함한다.
SDP 모드 레지스터(627)
이 레지스터는 SDP(420)의 동작을 제어하는 파라미터를 포함한다.
큐(Queue) 상태(621)
큐 상태(621)는, QME(305) 내에서 채널 프로세서{307(i)}의 메일박스(mailbox)의 상태와, 채널 프로세서{307(i)}에 의해 판독되고 있는 큐의 상태에 대한 정보를 포함한다. 채널 프로세서{307(i)}의 메일박스의 상태를 나타내는 레지스터에 대한 하드웨어는 QME(305)에 의해 직접 제어된다. 레지스터의 판독 및 기록은 따라서, 글로벌(global) 버스(319) 상에서 트래픽(traffic)을 초래하지 않는다. QME(305)는 채널 프로세서{307(i)}에 의해 판독되고 있는 큐의 상태를 페이로드(payload) 버스(317)를 통해 DMEM(405)에 대해 DMA 처리한다.
이벤트(Event) 타이머(620)
이 레지스터는 CPRC(401)에서 실행되는 소프트웨어에 의해 설정되고 개시될 수 있는 이벤트 타이머를 포함하고; 타이머가 만료될 때, CPRC(401)의 이벤트 메커니즘이 응답하는 이벤트가 초래된다.
주기 카운터 레지스터(619)
주기 카운터 레지스터(619)는 카운터 값, 클럭 분할 값 및 CC 인에이블 비트를 포함한다. CPRC(401)는 카운터 값, 클럭 분할 값 및 CC 인에이블 비트를 설정할 수 있다. 클럭 분할 값은 카운터 값이 CPRC(401)의 클럭에 대해 증가하는 비율을 명시한다. CPRC(401)가 CC 인에이블 비트를 설정할 때, 카운터는 동작을 개시하고, CPRC(401)가 CC 인이에블 비트를 클리어시킬 때, 카운터는 동작을 중지한다. 현재의 카운터 값은 CC 인에이블 비트를 설정하거나 클리어시킴으로써 영향을 받지 않는다.
이벤트 레지스터(631)
이 레지스터는 CPRC(401)가 응답해야만 하는 비동기 이벤트가 발생하였는 지를 나타내는 플래그를 포함한다. 이벤트의 두 개의 등급이 존재하는데, 이들은 플래그가 레지스터(630)에 존재하는 일반 이벤트와, 플래그가 데이터 스코프 이벤트 레지스터(632)에 존재하는 데이터 스코프(625)에 관련된 이벤트이다.
이와 같이 기술된 모든 레지스터에 함께, CPRC(401)는 또한 로컬 데이터 메모리(405) 내의 데이터에 액세스할 수 있고, SDRAM(229)과 로컬 데이터 메모리(405) 사이, 및 로컬 메모리(405)를 통한 SDP와 SDRAM(229) 사이의 DMA 전달을 설정할 수 있다.
CPRC(401), RxSDP(421), 및 TxSDP(427)의 협동 예의 상세사항 : 도7 - 도9
도 7은 RxSDP(421)와 CPRC(401)가 입력 패킷의 스트림을 처리하는데 있어서 상호 작용하기 위하여 어떻게 프로그램될 수 있는 지에 대한 개요를 제공한다. 흐름도(701)는 수행되는 동작뿐만 아니라 RxSDP(421), CPRC(401) 및 QME(305) 중 어느 것이 상기 동작을 수행하는 지도 나타낸다. 703에서 시작하여, 입력 패킷은 RxSDP(421)에 의해 판독된다(705). RxSDP(421)가 판독하는 것에 대해 RxSDP(421)가 무엇을 하는 지는 패킷 내에서 자료의 위치에 따른다. RxSDP(421)가 처리해야만 하는 정보는 3 종류가 존재하는데, 이들은 프로토콜 데이터 유닛, TLE(301)에 의해 변환되어야만 하는 프로토콜 정보 및 CPRC(401)에 의해 처리되어야만 하는 프로토콜 정보이다. 박스(707)에 도시된 바와 같이, RxSDP(421)는 자신이 판독한대로 프로토콜 데이터 유닛을 DMEM(405)을 경유하여 SDRAM(229)에 전달하기 위하여 DMA를 사용하고, 709에 도시된 바와 같이, RxSDP(421)는 TLE(301)이 변환해야만 하는 프로토콜 정보와 함께 메시지를 TLE(301)에 전달하기 위하여 링 버스(311)를 사용하고, 711에 도시된 바와 같이, 최종적으로 RxSDP(421)는 CPRC(401)가 프로토콜 정보를 처리하기 위해 필요한 정보를 CPRC(401)에 전달하기 위하여 추출 공간(601)을 사용한다.
블록(713)에서, CPRC(401)는, 전송 패킷에 대해 무엇이 이루어져야 하는 지를 결정하기 위하여, RxSDP(421)로부터 수신한 정보와, RxSDP(421)의 메시지에 따라 TLE(301)로부터 수신한 응답을 사용한다. 전송 패킷이 유효하지 않다면, 그 내용이 손상되었거나, 그 페이로드가 패킷 스위치에 의해 필터링 제거된 소스로부터 발생한 것이기 때문에, CPRC(401)는 제거를 위해 상기 패킷에 표식을 붙인다. 상기 표식{DMA 도중에 더해진 트레일러(trailer)에 포함된}에 따라, DMA 엔진은 송신을 중단하고, BME(315)는 상기 패킷을 수신하는 버퍼(231)를 자유롭게 한다.
전송 패킷이 유효하다면, CPRC(401)는, 상기 패킷으로부터의 프로토콜 데이터 유닛이 위치될 큐(215)를 결정하고, 큐(215)를 위한 설명자(217)를 구성하기 위하여, TLE(301)로부터 수신한 정보와, 추출 공간(601) 내의 정보를 사용한다. 그 후, 단계(751)에서 인큐(enqueue) 명령을 위치시키는데, 상기 명령은 프로토콜 데이터 유닛이 페이로드 버스(317) 상에 위치될 큐의 번호와 설명자를 포함한다.
QME(305)는 설명자(217)를 적절한 큐(215)에 위치시킴으로써 인큐 명령에 응답한다. 박스(717, 719 및 721)에 도시된 바와 같이, 큐를 판독하는 DCP(203)의 구성요소에 따라, 큐의 광범위한 세 개의 등급이 존재하는데, 이들은 XP 프로세서(313)에 의해 판독된 큐, 채널 프로세서(307)에 의해 판독된 큐 및 구조 프로세서(303)에 의해 판독된 큐이다. XP 프로세서(313)에 의해 판독된 큐의 경우에 있어서, 설명자에 대응하는 프로토콜 데이터 유닛은 호스트(227)로 진행할 수 있고, 패브릭 프로세서(303)에 의해 판독된 큐의 경우에 있어서, 설명자에 대응하는 프로토콜 데이터 유닛은 스위치 패브릭으로 진행할 수 있다.
여기에서, RxSDP(421), CPRC(401) 및 QME(305)는 모두 독립적으로 동작하는 프로세서이기 때문에, 흐름도(701)에 도시된 처리는 병렬로 처리될 수 있음이 지적되어야만 한다. RxSDP(421)과 CPRC(401)과의 파이프라이닝은 이미 설명되었고, 또한 CPRC(401)는 QME(305)가 CPRC(401)의 인큐 명령에 응답하는 것을 대기할 필요는 없다.
CPRC(401)와 RxSDP(421)의 상호작용에서 데이터 스코프(625)의 역할에 대해 보다 상세하게 진행하면, 수신 데이터 스코프(643)의 상세 사항이 도 9에 도시되었다. CPRC(401)와 RxSDP(421) 사이의 상호작용 상태를 나타내는 Rx 상태 레지스터(635)와 함께 시작하여, 상기 레지스터는 관심 대상의 4 개의 필드를 갖는데, OWN 필드(935)는 하드웨어에 의해 설정되고, 비트는 RxSDP(421)와 CPRC(401)가, Rx 상태(635)가 현재 속한 데이터 스코프(625)를 사용하는 지를 나타낸다. L5:L0(937)는, 프로그램 제어 하에서 RxSDP(421)과 CPRC(401)에 의해 설정 및 리셋되는 6개의 신호변경(handshake) 비트이다. 사용중(Busy)(941)은 RxSDP(941)에 의해 설정되고, RxSDP(421)이 사용중인 지를 나타낸다. Tx 상태(639)는 기능과 내용면에서 Rx 상태(635)와 유사하다.
RxCB(633)는 인입 패킷의 DMA 도중에 RxSDP(421)와 DMA 엔진(441) 사이의 상호작용을 조절한다. CPRC(401)는, RxCB(633)가 속한 데이터 스코프{625(i)}를 소유할 때, RxCB(633)를 설정하고, RxSDP(421)는, RxSDP(421)와 CPRC(401)가 데이터 스코프{625(i)}의 소유권를 변경하는 동안, 인입 패킷의 DMA 처리를 지속하기 위하여 RxCB(633)를 사용한다. RxCB(633) 내의 대부분의 필드는, DMA를 수행하기 위해 필요한 다양한 종류의 어드레스 지정 정보를 포함한다. 버퍼 풀 번호(909), BTAG(933) 및 오프셋(931)은 함께, DMA 엔진(411)이 RxSDP(421)에 의해 수신된 패킷을 현재 기록하고 있는 DRAM(229) 내의 위치를 지정한다.
이후에 보다 상세하게 설명되는 바와 같이, DRAM(229)은 버퍼 풀로 분할된다. BTAG(933)는 풀에서 버퍼를 위한 버퍼 태그(tag)(233)이고, 오프셋(931)은 데이터가 현재 기록되고 있는 버퍼 내의 오프셋이다. DMA 엔진(441)은 데이터를 기록할 때, 오프셋(931)을 갱신한다. DMEM DMA 어드레스(907)는, DMA 엔진(441)이 현재 DRAM(229)에 대해 데이터를 DMA 처리하고 있는, DMEM(405)내 데이터의 16바이트 라인의 어드레스이다. Txrcy 어드레스(905)와 Rxrcy 어드레스(903)는, RxSDP(421)가 DMEM(405)으로부터 데이터를 재순환시킬 때 RxSDP(421)가 사용하는 특별한 어드레스이다. Txrcy 어드레스(905)는 데이터가 TxSDP(427)를 위하여 DMA 엔진(441)에 의해 현재 기록되고 있는 DMEM(405)을 명시하는 반면, Rxrcy 어드레스(903)는 RxSDP(421)가 현재 데이터를 기록하는 DMEM(405) 라인을 명시한다. 어드레스는 이와 같이, SDRAM(229)에 기록되기 전, 또는 SDRAM(229)에 기록된 이후, RxSDP(421)가 패킷을 재순환하게 허용한다. DMEM 바이트 어드레스(901)는 RxSDP(421)가 현재 데이터를 기록하는 DMEM(405)에서의 라인이다.
RxDBCTL(913)은 CPRC(401), RxSDP(421) 및 DMA 엔진(441) 사이에서의 상호작용을 조절하는 제어 및 상태 필드를 포함한다:
ξ 가용(Av)(929)은 RxCB(633)가 사용될 수 있는 지를 나타내고,
ξNR(927)은 DMA 엔진(441)이 전달 도중에 포기하기 이전에 데이터를 DRAM(229)에 전달하기 위하여 구성해야만 하는 요구의 번호를 나타내고,
ξ에러(Err)(925)는 RxCB(933)에 의해 현재 표시되는 전달 도중에 에러가 발생하였는 지를 나타내고,
ξOWN(921)은 RxSDP(421)가 기록하고, DMA 엔진(411)이 판독하는 DMEM(405)에서의 라인이 현재 RxSDP(421)에 의해 기록되거나, DMA 엔진(411)에 의해 판독되는 지를 나타내고,
ξEOP(917)은, DMEM(405)의 라인에 기록될 데이터에서 패킷 표시자의 마지막을 만날 때, RxSDP(421)에 의해 설정되고,
ξST(915)는 SDP(420)의 현재 상태이고,
ξBCTL 상태(919)는 페이로드 버스(317)의 현재 상태이고,
ξ길이(911)는 RxSDP(421)에 의해 설정된다. 이는 RxSDP(421)가 기록중인 DMEM(405)의 라인 내의 데이터 길이이다.
Tx 제어 블록 레지스터(TxCB)(637)는, 조절하는 DMA 전달이 반대 방향으로 진행하고, 필드가 상기 방향에 대응하는 의미를 갖는다는 점을 제외하면, RxCB(633)와 거의 유사하다.
RxSDP(421)가 OWN 비트(935), L2 Done(937) 또는 Rx 상태 레지스터(636)에서의 L1 done(939) 또는 RxCB(633)에서 가용 비트(929)를 설정할 때, 결과는 CPRC(401)에 대한 인터럽트이고, 어떤 작용이 인터럽트를 생성하였는 지는, RxSDP가 해당 비트를 설정할 때 RxSDP가 들어 있는 스코프를 위한 데이터 스코프 이벤트 레지스터(632) 내의 비트에 의해 표시된다. Tx 데이터 스코프(641)에서 대응하는 비트를 위해 동일한 배열이 사용된다.
초기에, CPRC(401)는 데이터 스코프{625(0)}를 설정하였고, 소유권을 RxSDP(421)에 제공하였다. CPRC(401)는 이제 데이터 스코프{625(1)}를 소유한다. 패킷이 인입할 때, RxSDP(421)는 프로토콜 데이터를 추출하고, 이를 추출 공간 레지스터{601(0)}에 기록한다. RxSDP(421)는 변환을 필요로 하는 프로토콜 데이터를 포함하는 메시지를 Txmsg{645(0)} 내의 TLE(301)에 전달한다. 룩업의 결과는 RxResp 레지스터{647(0,i)}에서 나타날 것이다. 이것이 진행하는 동안, RxSDP(421)는 RxCB{633(0)}에서 지정된 DMEM(405) 내의 라인에 대한 프로토콜 데이터 유닛의 기록을 개시한다. 전체 라인이 수신되었을 때, RxSDP(421)는, CPRC(401)가 이제 데이터 스코프{625(0)}의 소유권을 소지한다는 것을 나타내기 위하여 Rx 상태(635)에서 owner(OWN) 비트(935)를 설정하고, DMA 엔진(411)이 이제 기록한 라인을 판독할 수 있다는 것을 나타내기 위하여 RxCB{633(0)} 내의 owner 비트(921)를 설정하고, RxSDP(421)를 데이터 스코프{910(1)}로 자동적으로 스위칭하는 신호를 생성한다. RxSDP(421)는 그 후, CPRC(401)가 여전히 그 비트에 대한 제어를 갖는 지를 확인하기 위하여 데이터 스코프{625(1)}의 owner 비트(935)를 검사한다. CPRC(401)가 제어를 갖는다면, RxSDP(421)는 다음 패킷을 처리를 개시하기 전에, CPRC(401)가 데이터 스코프{625(1)}의 제어를 포기할 때까지 대기한다. RxSDP(421)가 데이터 스코프{625(0)} 대신에 데이터 스코프{625(1)}의 자원을 사용하는 점을 제외하면, 처리는 위에서와 같다.
RxSDP(421)가 수신 데이터 스코프{625(1)}와 함께 동작하는 반면, CPRC(401)는 수신 데이터 스코프{625(0)}를 처리한다. CPRC(401)는, RxSDP(421)가 추출 공간 레지스터{601(0)}에 위치시킨 프로토콜 데이터를 검사 및/또는 제거하고, SDRAM(229)에 대한 DMA가 에러 없이 종료되었는 지를 결정하기 위하여 RxCB{633(0)}를 시험하고, RxSDP(421)에 의한 다음 사용을 위하여 RxCB{633(0)}을 설정한다. 그 후, SDRAM(229)에 기록되고 있는 데이터를 위한 설명자를 구성하기 위해, CPRC(401)는, RxSDP(421)가 추출 레지스터(601)에 위치시킨 프로토콜 데이터와, RxRsp 구조{647(0,i)}에서 TLE(301)로부터 수신된 임의의 변환물을 사용하고, 이 설명자를 QME(305) 내의 채널 프로세서(307)의 메일박스에 위치시킨다. CPRC(401)가 이들 모두를 수행하였을 때, owner 비트{935(0)}를 설정하여, 수신 데이터 스코프{625(0)}가 다시 RxSDP(421)에 대해 유효하게 되도록 한다. RxSDP(421)가 수신 데이터 스코프{625(1)}와 함께 종료되었다는 것을 나타내는 owner 비트{935(1)}가 설정되었다면, CPRC(401)는 수신 데이터 스코프{625(0)}에 대해 기술한 것과 동일한 방식으로 수신 데이터 스코프{625(1)} 상에서 동작한다.
도 8은 CPRC(401)와 TxSDP(429)가 전송 프로토콜의 스트림을 전송할 때 어떻게 상호작용하는 지에 대한 개요를 제공한다. 송신은 수신보다 상당히 단순한데, 왜냐하면 발신 패킷은 해석될 필요 없이 오직 모아져서 송신되는 것만을 필요로 하기 때문이다. 송신 시의 대부분의 작업은 CPRC(401)에 의해 이루어진다. 803에서 시작하여, CPRC(401)는 먼저 루프(805)를 실행하는데, 즉 채널 프로세서{307(i)}에 의해 판독되고 있는 큐(217)에서 설명자가 존재하는 지를 확인하기 위하여, QME(305)로부터 수신된 큐 상태 정보를 검사한다. 807에 도시된 바와 같이, 하나가 존재한다면, CPRC(401)는 디큐(dequeue) 명령을 페이로드 버스(317) 상에 위치시키고, 또한 페이로드 버스(317)를 통해 QME(305)로부터 설명자를 수신한다. CPRC(401)는 그후, 송신되는 패킷을 위해 필요한 병합 레지스터(603)를 설정하기 위하여 설명자 내의 정보를 사용하고(811), SDRAM(229)로부터 버퍼의 내용을 TxSDP(427)로 전달하도록 Tx 제어 블록 레지스터(637) 내의 레지스터를 설정하기 위하여 설명자 내의 버퍼 태그를 사용하고, 그후 송신을 개시한다(815). 상태(915) 또는 EOP(917)가 전달의 마지막을 나타낼 때, CPRC(401)는 TxSDP(427)와 전달에 포함된 다른 자원을 자유롭게 한다(817). TxSDP(427)과 CPRC(401)는, RxSDP(421)와 CPRC(401)에서와 동일한 방법으로, 데이터 스코프{625(0) 및 625(1)}를 교대로 사용한다. 데이터 스코프 사이의 교대는 CPRC(401)에 의해 실행되는 프로그램의 제어 하에 이루어지기 때문에, TxSDP(427)과 RxSDP(421) 사이의 데이터 스코프에 의해 표시되는 자원을 할당하기 위하여, 프로그램은 무엇이든 필요하다면 이를 수행할 수 있다.
RxSDP(421)의 상세사항 : 도 10 및 도 11
RxSDP(421)와 TxSDP(427)는 각 채널 프로세서{307(i)}에, 직렬 입력{204(i)}, 직렬 출력{206(i)}, 및 채널 프로세서{307(i)}의 다른 구성요소 사이에서 프로그램 가능한 인터페이스를 제공한다. 주어진 직렬 입력{204(i)}은 따라서 주어진 프로토콜에 속한 매체 패킷 및 전송 패킷을 적절하게 처리하기 위하여 필요한대로 프로그램될 수 있고, 주어진 직렬 출력{204(j)}은 주어진 프로토콜에 속한 매체 패킷 및 전송 패킷을 출력하도록 프로그램될 수 있다. 각 SDP(421 또는 427)는 자신의 마이크로프로그램 저장 매체와 독립적인 레지스터 세트를 구비한다.
도 10은 RxSDP(421)의 블록도이다. 구성 요소는, 직렬 입력을 병렬로 변환시키고, 먼저 매체 패킷 레벨에서, 그 후 전송 패킷 레벨 또는 상위 레벨에서 입력을 처리하는 일련의 프로세서 및 FIFO이다. 일부 프로세서는 특정 프로토콜을 처리하기 위하여 특수화된다. 데이터가 임의의 프로세서 및/또는 FIFO를 우회하도록 허용하기 위하여, 우회 경로가 프로그램될 수 있다. 개략하여, 구성 요소는 다음과 같다,
ξ 물리적인 계층으로부터 직렬 입력을 수신하고, 10-비트 코드의 스트림을 생성하기 위하여 이를 해석하는, 구성 가능한 물리적인 로직(443).
ξ 물리적인 계층으로부터 10-비트 코드를 수신하는 핀 인터페이스{204(i)}.
ξ핀 로직(443)으로부터 수신한 10-비트 코드로부터 바이트를 생성하는 8b/10b 디코드 회로(1001).
ξ프로그램 가능한 다른 기록 및 판독 클럭에 대해 비동기 FIFO(큐)인 소형 FIFO(1003). 기록 클럭은 입력 데이터 스트림을 위해 필요한 주파수로 진행하고, 판독 클럭은 CPRC(401)의 속도로 진행한다. 현재 양호한 실시예에 있어서, FIFO(1003)는 9-비트의 8 워드 깊이(eight 9-bit words deep)이다.
ξ추출된 필드가 경로(1005)를 경유하여 추출 공간(417)으로 진행하는 상태에서, 소형 FIFO(1003)으로부터 수신하는 바이트의 스트림 상에서 패턴 매칭과 필드 추출을 수행하는, 수신 비트 프로세서(1005).
ξSONET 프레임을 처리하는 수신 SONET 프레이머(framer)(1007). 수신 SONET 프레이머(1007)는 프레임 내의 데이터를 디스크램블(descramble)시키고, 프레임으로부터 프로토콜 데이터를 제거하고, 프로토콜 데이터를 경로(1008)를 경유하여 추출 공간(417)에 기록한다.
ξATM 셀을 처리하는 수신 동기 프로세서(1009). 동기 프로세서(1009)는 셀 경계를 발견하고, 프로토콜 데이터를 제거하고, 프로토콜 데이터를 갖는 TLE 동작을 개시시키고, 페이로드를 디스크램블시키고, 프로토콜 데이터를 경로(1019)를 겨유하여 추출 공간(417)에 기록한다.
ξ비동기 FIFO인 대형 수신 비동기 FIFO(1011). 현재의 양호한 실시예에 있어서, FIFO(1011)는 10-비트의 64 워드 깊이이다. FIFO(1011)는 주로 VPI/VCI가 TLE(301)에 의해 룩업되는 동안 ATM 셀을 실현하고(staging), 고속 수신 패킷을 갖는 유연성을 제공하기 위하여 사용된다.
ξ수신 바이트 프로세서(1013)는, 데이터의 9-비트 워드 상에서 패턴 매칭과 필드 추출을 수행하기 위하여 마이크로코드 제어 하에서 동작한다.
우회 경로(1015)는 멀티플렉서(1002, 1006, 1014 및 1010)를 통해 실현된다. 멀티플렉서(1010)는 또한 재순환 경로(441)를 실현한다. 우회 및 재순환 경로는 SDP 모드(627)에서 비트를 설정함으로써 동적으로 재구성될 수 있다. 데이터는 RxSDP 제어(613)에서의 레지스터를 통해 CPRC(401) 및 비트 프로세서(1005), 동기 프로세서(1009), 또는 바이트 프로세서(1013) 사이에서 직접 전달될 수 있다.
이전에 설명한 바와 같이, 채널 프로세서(307)는 매우 높은 속도의 데이터 스트림을 처리하도록 군집될 수 있다. 군집화되었을 때, 군집화된 채널 프로세서는 파이프라인으로 동작하고, 군집화된 채널 프로세서 각각은 데이터 스트림의 한 부분을 차례로 처리한다. 군집의 RxSDP(421) 사이의 합동은 토큰(token) 버스(1027, 1017 및 1028)를 통해 달성된다. 예컨대, 군집에 있어서, 인에이블된 Rx 비트 프로세서(1005)는 토큰 버스(1004)에 의해 제공된 토큰을 구비할 때만 인입 데이터 스트림을 처리할 것이다. 수 개의 토큰 버스가 필요한데, 왜냐하면 입력 스트림을 처리하기 위해 사용되는 RxSDP(421)의 구성요소는 입력 스트림의 종류에 따라 변하기 때문이다.
구성 가능한 핀 로직(443)의 상세 사항 : 도 46 및 도 47
구성 가능한 핀 로직(443)은 다음의 두 가지 방법으로 구성될 수 있다:
ξ하나의 클러스터에서 1, 2 또는 4개의 SDP(420)에 입력 스트림을 제공하거나 또는 이로부터 출력 스트림을 수신하기 위하여,
ξ매체를 위해 필요한 다른 물리적인 인터페이스와 동작하기 위하여 구성되며, 상기 매체를 통해 입력 스트림 또는 출력 스트림이 송신된다.
구성의 제 1 종류는 매우 높은 속도의 입력 및 출력 스트림을 처리하기 위하여 클러스터(309)에서 채널 프로세서(307)의 군집을 허용하는 소자 중 하나이고, 구성의 제 2 종류는 DCP(203)에 의한 사용을 위해 매체로부터 수신된 신호를 사용하기 위하여 DCP(203)에 외부적인 장치의 추가 없이, DCP(203)이 다른 송신 매체 대해 사용되는 것을 허용한다. 구성의 두 종류 모두 채널 프로세서의 로컬 메모리 내의 레지스터에 의해 제어된다. 레지스터는 채널 프로세서 자신 또는 XP(313)에 의해 설정될 수 있다.
도 46은, DCP(203) 내의 클러스터(309)가, RMII, OC-3, DSI, DS3, GMII, TBI 및 OC-12 표준에 부합하는 직렬 데이터 스트림을 수신 및 생성하기 위하여, 어떻게 구성될 수 있는 지를 도시하는 테이블(4601)이다. 컬럼(4603)은 클러스터에서 채널 프로세서의 각각에 대한 I/O 핀을 나열하고, 컬럼(4605)은 핀의 일반 용도를 나타내고, 따라서 각 채널 프로세서에서 I/O 핀(0 및 1)은 클럭 신호용이고, 반면 나머지 핀은 데이터용이다. 나머지 컬럼은 핀이 각 매체를 위해 어떻게 사용되는 지를 도시하고, 컬럼(4607)은 이들이 RMII에서 어떻게 사용되는 지를 나타내고, 4609는 OC-3에서 이들이 어떻게 사용되는 지를, 4611은 이들이 DS3에서 어떻게 사용되는 지를, 4615는 클러스터에서 두 개의 채널 프로세서가 데이터를 수신하기 위하여 사용되고 두 개는 송신하기 위하여 사용될 때, 이들이 GMII에서 어떻게 사용되는 지를, 4617은 채널 프로세서가 동일한 방법으로 사용될 때, 이들이 TBI에서 어떻게 사용되는 지를, 4619는 클러스터 내의 채널 프로세서가 송신기 및 수신기가 되는 것 사이에서 교대되는 OC-12에서 이들이 어떻게 사용되는 지를 나타낸다.
다양한 매체는 다른 종류의 구동기와 I/O 핀을 위한 수신기를 필요로 하고, 따라서 구성 가능한 핀 로직(443)에서 각 I/O 핀은 3-상태 구동기, TTL 구동기 및 PECL 구동기를 구비한다. PECL 로직을 사용한 OC-3과 같은 매체로, I/O 핀의 쌍은 컬럼(4609)에 도시된 바와 같이 차동 쌍으로 구성된다.
도 47은 핀 모드 레지스터(4701)와 SDP 모드 레지스터(4713)를 도시한다. 각 채널 프로세서(307)는 이들 레지스터 각각중 하나를 구비한다. 레지스터(4701)는 채널 프로세서의 I/O 핀이 어떻게 구성되는 지를 결정한다. 데이터 구성 비트(4703)는 I/O 핀이 3-상태 구동기, TTL 구동기 또는 PECL 구동기에 의해 어떻게 구동될 지를 결정하는 4 비트이다. RxClk 멀티플렉서(4705)와 TxClk 멀티플렉서(4707)는, 수신 및/또는 송신 클럭 신호를 전달하기 위하여 어떤 핀이 사용되는 지를 각각 명시한다. Rx 데이터 인에이블(4709)은 데이터를 수신하기 위하여 어떤 핀이 사용될 지를 지정한다. Tx 데이터 인에이블(4711)은 최종적으로 어떤 핀이 데이터를 송신하기 위하여 사용될 지를 명시한다.
SDP 모드 레지스터(4713)는, RxSDP(421)의 구성요소 중 어느 것이 인에이블될지, 어떤 재순환 회로가 인에이블될지, 및 채널 프로세서(309)가 속한 클러스터에서 어떤 종류의 군집이 현재 사용되는 지를 제어하는 비트를 포함한다. 채널 프로세서의 TxSDP(427)를 위한 유사한 레지스터가 존재한다. RxEn 비트(4715)는 채널 프로세서의 RxSDP(421)가 인에이블될 지를 나타내고, 비트(4717)는 바이트 프로세서(1013)가 인에이블될 지를 나타내고, 비트(4719)는 비트 프로세서(1005)가 인에이블될 지를 나타내고, 비트(4721)는 Rx Sonet 프레이머(1007)가 인에이블될 지를 나타내고, 비트(4723)는 Rx 동기 프로세서(1009)가 인에이블될 지를 나타낸다. 다음의 두 비트는 재순환 제어용이다, 즉 비트(4725)는 바이트 프로세서(1013)에 대한 재순환을 나타내고, 비트(4729)는 추출 공간(417)으로부터 비트 프로세서(1005)에 대한 재순환을 나타낸다. 군집 모드 필드(4731)는, 클러스터 내에 군집이 없는 지, 양-방향 군집(즉, 두 채널 프로세서가 수신하고, 두 개가 송신하는)이 존재하는지, 또는 4-방향 군집(4개 채널 프로세서 모두가 수신 또는 송신하는)이 존재하는지를 명시하는 2-비트 필드이다.
SDP 내의 프로세서의 실현 : 도 11
도 11은 SDP 내의 프로세서가 어떻게 실현되는 지를 도시한다. 여기에서 상세하게 도시된 프로세서는 수신 바이트 프로세서(1013)이지만, 수신 비트 프로세서(1005) 내의 프로세서와 수신 동기 프로세서(1009)는 유사하다. Sonet 프레이머(1007)는 도 11에서의 하나와 같은 프로세서를 사용하여 실현되는 구성 가능한 상태 기계이다.
멀티플렉서(1107)에서 도시된 바와 같이, 수신 바이트 프로세서(1013)는 대형 FIFO(1011)로부터의 외부 입력을 수신한다. 수신 바이트 프로세서(1013)는 멀티플렉서(1123)를 경유하여 외부 출력을 링 버스 인터페이스(415), 추출 공간(417) 또는 버퍼(1025)에 제공할 수 있는데, 이들은 차례로 DMEM(405)에 프로토콜 데이터 유닛을 제공한다. 수신 바이트 프로세서(1013) 내부의 구성요소는 다음의 구성요소를 포함한다:
ξ제어 저장 매체(1101)로서, 이는 프로세서(1013)에 의해 실행되는 마이크로코드를 포함하고, 프로세서(1013)의 다른 구성요소를 제어하는 제어 신호(점선 화살표)를 제공함으로써 현재 어드레스 지정된 마이크로 지시에 응답한다. 제어 저장 매체(1101)는 XP(313)에 의해 로딩될 수 있다.
ξ다음 어드레스 로직(1105)으로서, 이는 제어 저장 매체(1101)로부터 실행될 다음 마이크로 지시를 선택함으로써, 제어 저장 매체(1105)로부터의 제어 신호와, 조건 코드 멀티플렉서(1121) 및 내용-어드레스 지정 가능한 메모리{CAM(1117)}로부터의 입력에 응답한다.
ξ카운터(1109) 및 일반 레지스터(1115). 카운터는 현재 처리가 이루어지는 패킷 내에서 비트 위치의 추적을 지속한다. 4개의 8비트 카운터{1109(0..3)}가 존재하는데, 이들은 2개의 16비트 카운터로 구성될 수 있고, 카운터로부터 다음 어드레스 로직(1105)에 대한 입력에 의해 도시된 바와 같이, 마이크로 코드는 카운터 값에 따른 동작을 명시할 수 있다. 일반 레지스터(1115)는 처리 도중에 사용된 데이터를 저장하기 위한 6개의 8비트 레지스터이다.
ξCAM(내용-어드레스 지정 가능한 메모리)(1117)으로서, CAM은 패턴 매칭에 사용되는 메모리이다. CAM 내의 각 셀은 패턴을 포함하고, CAM 셀 내에 저장된 패턴과 매칭되는 데이터가 CAM에 제공될 때, CAM은 CAM 내의 셀의 위치를 출력한다. 마이크로 코드는 CAM에 의해 출력되는 값에 의존하는 동작을 명시한다. CAM(1117)은 CPRC(401)와 XP(313)에 의해 로딩된다. CAM에는 64개의 9비트 워드가 존재하고, CAM은 최대 16개의 논리적인 CAM으로 프로그램적으로 분할될 수 있다.
ξCRC(1111)로서, 이는 순환 중복 검사(cyclic redundancy check)를 수행하기 위한 전문 하드웨어이다. 또 다른 전문 하드웨어는 패킷을 디스크램블링(descrambling)하기 위하여 포함될 수 있다.
ξALU(1119)로서, 이는 배럴 로테이터(barrel rotator)를 병합하는 8-비트의 ALU이다.
상술한 바와 같이, XP(313)는 CTL 저장 매체(1101)와 CAM(1117)을 로딩함으로서 동작을 위한 수신 바이트 프로세서(1013)를 설정한다. CPRC(401)는 리셋 신호로 바이트 프로세서(1013)를 정지 및 개시시킨다.
바이트 프로세서(1013)가 일단 동작하면, 수신한 각 바이트를 CAM(1117)에 제공한다. 전송 패킷의 시작을 나타내는 매칭이 발견되면, 제어 로직(1105)은 전송 패킷을 처리하기 위한 마이크로코드의 실행을 개시한다. 카운터는 설정되고, 바이트 프로세서(1013)는 CAM(117)과 카운터 값으로 발견된 다른 매칭에 의해 표시된 패킷을 처리한다. 매칭은 (패턴, 마스크, 길이) 또는 (오프셋, 패턴, 마스크, 길이)에 의해 마이크로코드에서 명시될 수 있는데, 오프셋은 패킷내에서의 오프셋이고, 마스크는 "무정의"("don't care") 비트를 기술하고, 길이는 매칭 내에서의 비트의 총 수를 기술한다. 전송 패킷으로부터의 프로토콜 데이터는 추출되어 경로(1019)를 경유하여 추출 공간(417) 또는 링 버스 인터페이스(415)로 향하고, 프로토콜 데이터 유닛은 추출되어 경로(425)를 경유하여 16개의 바이트 버퍼(1025)로 전달되는데, 여기에서부터 데이터는 DMEM(405) 내의 한 라인으로 DMA처리된다. 추출은 (오프셋, 길이, 레지스터 어드레스)에 의해 마이크로코드로 명시되는데, 여기에서 오프셋은 역시 패킷 내의 오프셋이고, 길이는 추출될 필드의 비트 길이이고, 레지스터 어드레스는 상기 필드가 저장될 일반 레지스터(1115)내의 한 레지스터의 길이이다.
수신 비트 프로세서(1005)의 상세 사항
RxSDP(421)의 구성요소에 의해 수행되는 기능에 대해 보다 상세하게 계속하면, 수신 비트 프로세서(1005)는, CRC(1111) 대신에 선형 피드백 이동 레지스터를 구비하는 점을 제외하면, 수신 바이트 프로세서(1013)와 유사하다. 선형 피드백 이동 레지스터는 최대 32개의 비트 길이로 구성될 수 있고, 데이터 스트림에 대한 다항식과 위치를 갖는다. 선형 피드백 레지스터는 하쉬(hash)값 또는 다른 체크합(checksum)을 생성하기 위하여 사용된다. 수신 비트 프로세서(1105)는 가장 낮은 레벨에서 RxSDP(421)에 의해 수신된 바이트 스트림을 처리한다. 따라서, 수신 비트 프로세서는, HDLC 프레임과 유효하지 않은 시퀀스를 검출하고, 스터핑(stuffing)된 0을 제거하고, OC-3 데이터 스트림에서 STS 프레임을 발견하고, 인입 이더넷(Ethernet) 프레임의 서문을 발견 및 삭제하기 위하여, 프로그램될 수 있다.
수신 SONET 프레이머(1007)의 상세 사항
수신 SONET 프레이머(1007)는 SONET 프레임을 처리한다. 프레이머(1007)는 수신 비트 프로세서(1005)로부터 또는 우회 경로(1015)를 경유하여 핀 인터페이스{204(i)}로부터 직접 프레임을 수신할 수 있다. SONET 프레이머(1007)로의 입력은 핀 인터페이스{204(i)}에 연결된 물리적인 계층의 인터페이스 칩에 의해 복구된 수신 클럭 프레임 동기 신호와, 프레임에 포함된 8-비트 데이터를 포함한다. SONET 프레임은 전송 오버헤드와, 프레임 페이로드를 포함하는 동기 페이로드 엔빌로프(SPE)를 포함한다. 전송 오버헤드에 포함된 것은 동기 페이로드 엔빌로프를 가르키는 STS 포인터이다. 동기 페이로드 엔빌로프는 경로 오버헤드 바이트를 포함한다.
수신 SONET 프레이머(1007)는 SONET 프레임 내의 바이트를 디스크램블시키고, 패리티를 체크하고, 전송 오버헤드를 경로(1008)를 경유하여 추출 공간에 기록한다. 수신 SONET 프레이머(1007)는 SPE를 발견하기 위하여 추가로 STS 포인터를 해석한다. SPE를 발견하면, 패리티를 체크하고, SPE의 경로 오버헤드를 추출 공간에 기록한다. SPE 내의 페이로드는, 페이로드의 종류에 의해 요구 되는대로 RxSDP(421)의 다른 구성요소에 전달된다. 예컨대 페이로드가 ATM 셀이라면, 이들은 수신 동기 프로세서(1009)에 전달된다. 양호한 실시예에 있어서, 수신 SONET 프레이머(1007)는 SPE 페이로드의 디멀티플렉싱을 수행하지 않는다.
수신 동기 프로세서(1009)의 상세 사항
수신 동기 프로세서(1009)는 ATM 셀을 처리하도록 전문화된다. ATM 셀은 53 바이트를 포함한다. 5개 바이트는, 가상 경로 표시기, 가상 채널 표시기, 페이로드 형태 표시기, 셀 손실 우선순위 표시기, 포괄 흐름 제어 정보 및 헤더 에러 체크 바이트를 포함한다. 나머지 48개 바이트는 페이로드이다. 수신 동기 프로세서(1009)는 헤더 에러 체크를 5-바이트 시퀀스로 순차적으로 적용하고, 시퀀스 내의 제 5 바이트를 시퀀스 내에서 4개 바이트를 처리하기 위한 헤더 에러 체크 바이트로 취함으로써, 바이트의 스트림이 ATM 셀의 스트림인 것을 결정한다. 헤더 에러 체크가 실패하면, 수신 동기 프로세서(1009)는 이의 시도를 지속한다. 헤더 에러 체크가 성공하면, 수신 동기 프로세서(1009)는 ATM 셀을 발견한 것이다. 한 행 내에서 프로그램 가능한 다수의 셀을 발견하면, ATM 셀의 스트림상에서 동기가 맞춰진다. 프로그램 가능한 다수의 연속 헤더 에러 체크가 실패할 때까지, 동기화가 지속되며, 동기 프로세서(1009)가 더 이상 ATM 셀의 스트림 상에서 동기화되지 않음을 나타낸다.
수신 동기 프로세서(1009)가 ATM 스트림 상에서 동기화 상태일 때, ATM 셀의 헤더를 분석하고, 헤더의 내용을 추출 공간에 출력한다. 수신 동기 프로세서(1009)는 페이로드를 디스크램블링하고 상태 바이트를 페이로드에 첨가시킴으로써 페이로드를 추가로 처리하여, 셀에 대한 헤더 체크가 실패하면 제거될 수 있게 된다. 일반적으로 말해, 수신 동기 프로세서(1009)로부터의 페이로드 출력은 대형 FIFO(1011)로 진행하고, 상기 FIFO는 페이로드의 추가 처리가 필요하기 이전에 VPI-VCI 상에서 TLE 룩업을 허용한다.
수신 바이트 프로세서(1013)의 상세 사항
수신 바이트 프로세서(1013)는 몇 가지 기능을 수행하기 위하여 프로그램될 수 있다:
ξSONET를 통해 PPP를 위한 HDLC 탈출 시퀀스를 처리한다;
ξ이더넷 및 AAL5를 위한 프레임 체크 시퀀스를 포함하여, 32-비트 CRC 체크를 실행한다;
ξ채널 프로세서{370(i)}가 1000BASE-X 기가 비트 이더네트를 처리하기 위하여 다른 것과 군집화될 때, 수신 바이트 프로세서(1013)는 이더네트 디리미터 인식을 수행하고, 재순환 경로를 사용하여 수신 바이트 프로세서(1013)는 T1 및 T3 데이터 율을 처리하기 위하여 다른 것과 군집화될 수 있다. 재순환 경로는 또한 다중-채널 HDLC 및 암호/해독의 처리를 허용한다;
ξ수신 바이트 프로세서(1013)는 프레임의 마지막을 검출할 때 상태 워드를 추출 공간에 기록한다;
ξ수신 바이트 프로세서(1013)는 ATM 셀의 헤더로부터 VPI/VCI를 추출하고, 가상 경로 표시기 및 가상 채널 표시기를 포함하는 메시지를 링 버스(311)를 경유하여 TLE(301)에 전달한다. TLE(301)는, 그러한 VPI-VCI 조합을 갖는 ATM 스트림에 대한 출력 큐를 나타내는 메시지를 채널 프로세서{370(i)}에 되돌림으로써 메시지에 응답한다.
수신 바이트 프로세서(1013)는 9-비트 워드를 처리한다. 수신 바이트 프로세서의 동작은 이미 상세하게 설명하였다.
구성요소들의 협동(cooperation)에 대한 예
다음의 예에서, RxSDP(421)의 핀 인터페이스(204)(i)는 페이로드 데이터가 SONET 프로토콜을 사용하여 송신되는 광케이블에 연결된다는 것이 가정될 것이다. SONET 프레임 내의 페이로드 데이터는 ATM 셀이고, 헤더가 특정 VPI/VCI 쌍을 갖는 ATM 셀 내의 페이로드는 IP 패킷이다. RxSDP(421)은 SONET 프레임으로부터 ATM 셀을 추출하고 상기 ATM 셀을 처리하기 위해 프로그램된다.
SONET 프레임으로부터의 바이트들은 먼저 Rx 비트 프로세서(1005)로 가고, Rx 비트 프로세서(1005)는 상기 바이트들을 SONET 프레이머(framer)(1007)에 보낸다. Rx 비트 프로세서(1005)는 또한 프레임의 시작을 검출하고, 수신 SONET 프레이머(1007)에 그것의 도착을 나타내는 신호를 보낸다. 수신 SONET 프레이머(1007)는 페이로드 데이터를 디스크램블링하고, 패리티(parity)를 검사하며, SONET 프레임에 위치시킨다. ATM 셀의 페이로드는 수신 동기 프로세서(1009)에 도달하고, 상기 수신 동기 프로세서(1009)는 ATM 셀을 검출하고, 상기 ATM 셀의 헤더를 판독하며, 상기 헤더 내의 정보를 추출 공간(417)에 보낸다. 다음으로, ATM 셀의 페이로드는 Rx 바이트 프로세서(1013)에 도달하고, 상기 Rx 바이트 프로세서(1013)는 ATM 셀의 VPI/VCI 쌍을 변환하기 위해서 TLE(301)에 보내고, 추출 공간(417)으로 가는 ATM 패킷의 페이로드에 포함된 임의의 패킷의 헤더로부터 정보를 판독한다.
TxSDP(427)의 상세한 설명 : 도 12
TxSDP(427)은 RxSDP(421)의 반대이다: 즉, 상기 TxSDP(427)는 SDRAM(229)로부터 프로토콜 데이터 유닛을 수신하고, 핀 인터페이스(206)(i)가 연결되는 물리적 인터페이스와 목적지에 필요한 형태로 프로토콜 데이터 유닛을 출력하는데 필요한 프로토콜 데이터를 추가한다. 또한, 동작은 계층적이고, 전송 패킷을 위한 프로토콜 데이터가 매체 패킷을 위한 프로토콜 데이터의 헤더에 추가된다. 도 12는 TxSDP(427)의 상세도를 나타낸다. 프로토콜 데이터 유닛이 DMEM(405)으로부터의 경로(431)를 통해 16 바이트 버퍼(1229)로 가고, Tx바이트 프로세서(1213)에 의해 상기 16 바이트 버퍼(1229)로부터 판독되고; 프로토콜 데이터는 병합 공간(419)으로부터 나와 경로(429)를 통해 TxSONET 프레이머(1207) 및 Tx비트 프로세서(1205)뿐만 아니라 Tx바이트 프로세서(1213)로 간다. RxSDP(421)에 대한 재순환 경로는 441에 있다; 멀티플렉서(1206, 1204, 및 1202)는 우회 경로(1215)를 구현한다. 군집 경로(1223)는 주어진 TxSDP(427)가 상기 주어진 TxSDP(427)와 군집(aggregation)을 이루는 다른 TxSDP(427)에 의해 변환된 전송 패킷의 스트림에 매체 프로토콜 데이터를 추가하도록 허용한다. 주어진 TxSDP(427)는 군집의 일부일 때, Tx바이트 프로세서(1213)의 출력은 Tx바이트 토큰 버스(1225) 상의 토큰에 의해 제어된다. TxSDP(427)의 구성요소는 그것들의 기능이 프로토콜 데이터를 추출하기보다는 오히려 프로토콜 데이터 유닛의 스트림에 프로토콜 데이터를 첨가하는 것이라는 점을 제외하고는 RxSDP(427)의 유사-명명된 구성요소와 유사하다. 기능이 다르다는 점의 결과중 하나는 TxSDP(427)에 있어 링 버스 메시지를 보내기 위한 준비가 존재하지 않는다는 것이다. Tx상태(639) 및 TxCB(637)는 방향에 있어서의 차이를 제외하고는 Rx 데이터 스코프(643)의 대응하는 구성요소와 유사한 기능을 한다. TxSDP ctl(615)에 있는 레지스터는 CPRC(401)이 TxSDP(427)와 통신하도록 더 허용하고, SDP 모드(627)에 있는 레지스터는 우회 경로를 구성한다.
구성요소를 출력이 처리되는 순서로 보면 다음과 같다:
ξ Tx 바이트 프로세서(1213)는 DMEM(405)로부터 프로토콜 데이터 유닛을 판독하도록 그리고, 필드 삽입, 제거, 및 대체를 구현하도록 프로그램가능하다. Tx 바이트 프로세서(1213)는 프로토콜 데이터 유닛의 48-바이트 청크(chunk)로 ATM 헤더를 프리팬딩(prepending)하고 선택적으로 셀 내용을 스크램블링함으로써 ATM 셀을 생성하도록 또한 프로그램가능하다. 송신할 프로토콜 데이터 유닛이 없을 때, Tx 바이트 프로세서(1213)는 휴지 ATM 셀(idle ATM cell)을 생성한다.
ξ 대형 비동기 FIFO(1211)은 64 워드 길이와 9 비트 폭을 가지며, 프로세서(1213)에 의해 수행되는 필드 삽입 및 제거를 위해 필요한 융통성(elasticity)을 제공한다. FIFO(1211)은 코어 클럭 속도(core clock rate)로 기록되고, 코어 클럭이나 직렬 클럭 속도중 하나로 판독될 수 있다.
ξ SONET 프레이머(1207)는 Tx바이트 프로세서(1213)의 출력이 페이로드인 SONET 프레임을 생성한다.
ξTx 비트 프로세서(1205)는 지능 직렬-병렬 프로세서이다. 프로그램 제어 아래에서, 상기 프로세서(1205)는 그것이 수신하는 데이터에 대한 필드 삽입, 제거, 및 대체를 구현한다. 입력 데이터는 8 비트 폭을 갖고, 동시에 출력 데이터는 물리적 인터페이스에 따라 1, 2, 또는 4 비트이다. 프로세서(1205)는 범용의 선형적인 피드백 시프트 레지스터를 포함한다.
ξ소형 FIFO(1203) : 데이터는 코어 클럭 속도로 상기 FIFO에 기록되고, 직렬 클럭 속도로 상기 FIFO로부터 판독된다. FIFO는 8 워드 길이와 9 비트 폭을 갖는다.
ξ8b/10b 엔코더(1201)는 데이터의 8b/10b 엔코딩을 수행한다.
프로세서(1213, 1207, 및 1205)는 프로그램가능하며 또한 상술된 Rx 바이트 프로세서(1013)와 같이 동일하고 일반적인 내부 구조를 갖는다.
구성요소들의 협동은 RxSDP(421)에 대해 사용된 예와 반대인 예를 통해 설명될 것이다: 입력은 IP 패킷인 프로토콜 데이터 유닛이며; 출력은 자신의 페이로드로서 ATM 셀을 갖는 SONET 프레임이고, 상기 ATM 셀은 자신들의 페이로드로서 IP 패킷을 차례로 구비한다. IP 패킷은 최종적으로 SRAM(229)에 저장되고, 거기로부터 DMEM(405)에 DMA되며; ATM 셀과 SONET 프레임을 형성하는데 필요한 프로토콜 데이터는 병합 공간(419)에 존재한다. IP 패킷은 DMEM(405)으로부터 48-바이트 청크로 판독되며; Tx 바이트 프로세서(1213)는 각각의 48-바이트 청크에 대한 ATM 헤더를 만들고, 최종 ATM 셀은 대형 FIFO(1211)에 도달하고, 대형 FIFO(1211)로부터의 상기 ATM 셀은 SONET 프레이머(1207)에 의해 판독된다. SONET 프레이머(1207)는 ATM 셀을 ATM 프레임의 페이로드로서 패킷화하고, 필요한 SONET 프로토콜 데이터를 추가한다. 다음으로 SONET 프레임은 Tx 비트 프로세서(1205)로 출력되고, 상기 Tx 비트 프로세서(1205)는 상기 SONET 프레임을 직렬화하고 소형 FIFO(1203)로 출력하며, 소형 FIFO(1203)로부터의 상기 SONET 프레임은 엔코더(1201)에 도달하고, 그런 후에 상기 엔코더(1201)로부터 핀 인터페이스{206(i)}에 도달한다.
PDH 전화통신(telephony)을 구비한 채널 프로세서(307)의 사용
장거리 전화 서비스는 수년 동안 장거리 호(call)를 운반하기 위해 디지털 청크를 사용하고 있다. 이러한 시스템에서, 호에 의해 연결되는 전화기를 통해 생성된 오디오 신호는 1-바이트 샘플로 디지털화되고, 많은 호로부터 디지털화된 샘플은, 샘플에 대한 경로지정(routing) 정보와 더불어 청크 상태로 멀티플렉싱된다.
샘플과 그것들의 경로지정 정보가 매우 간단한 패킷으로 보여질 수 있는 반면에, 이러한 시스템 내에는 패킷 계층이 존재하지 않고, 수신 포트와 송신 포트 사이의 상호관계는 고정된다. 따라서, SDRAM(229)에는 테이플 룩업, 설명자 큐(descriptor queue), 또는 패킷을 위한 버퍼에 대한 필요성이 존재하지 않는다. 대신에, 수신 채널 프로세서{307(i)}는 송신 채널 프로세서(j)와 글로벌 어드레스 공간(global address space)(321)을 공유하고, 송신 채널 프로세서{307(j)}의 DMEM(405)에 있는 큐에 각 샘플을 간단하게 기록하며, 송신 채널 프로세서{307(j)} 내의 CPRC(401)는 큐를 관리한다는 사실을 이용한다.
채널 프로세서(307) 군집 : 도 13, 14, 26 내지 27
앞서 설명된 바와 같이, 채널 프로세서(307)는 4개의 채널 프로세서(307)로 이루어진 클러스터(309)에 배열된다. 클러스터 내의 채널 프로세서 배열은 채널 프로세서로 하여금 군집을 이루도록 함으로써, 상기 채널 프로세서가 단일 채널 프로세서(307)에 대해 가능하게 되는 속도보다 더 빠른 속도로 수신 또는 송신할 수 있게 한다. 바람직한 실시예에서, 군집은 OC-12c 및 기가비트 이더넷 프로토콜을 송신 및 수신하기 위해서 사용된다. OC-12c 프로토콜을 통해, 클러스터 내에 있는 4 개의 채널 프로세서 중 2 개의 채널 프로세서가 데이터를 수신하기 위해 사용될 수 있고, 다른 2 개의 채널 프로세서가 데이터를 송신하기 위해 사용될 수 있거나 2 개의 클러스터가 하나는 데이터를 수신하고 다른 하나는 데이터를 송신하기 위해 사용될 수 있다. 기가비트 이더넷 프로토콜을 통해, 2 개의 클러스터가 사용되고, 하나의 클러스터 내에 있는 4 개의 채널 프로세서가 프로토콜에 따른 수신을 위해 사용되고, 다른 클러스터 내에 있는 4 개의 채널 프로세서가 프로토콜에 따른 송신을 위해 사용된다.
프로토콜을 수신하기 위해서 채널 프로세서 그룹을 군집화하는 것은 본 명세서에서 수신 군집(receive aggregation)이라는 용어로 표현되고, 대응적으로, 프로토콜을 송신하기 위해서 채널 프로세서 그룹을 군집화하는 것은 송신 군집(transmit aggregation)이라는 용어로 표현된다. 수신 군집에 있어서, 각각의 채널 프로세서는 프로토콜로부터 모든 입력을 수신하지만, 그것의 일부만을 처리한다. 송신 군집에 있어서, 각각의 채널 프로세서는, 실질적으로 송신 매체에 출력을 제공하는 채널 프로세서에 필요할 때, 프로토콜에 대해 출력의 일부만을 수신하여 그것의 일부를 출력한다. 클러스터 내에 있는 채널 프로세서의 직렬 I/O 핀은 형태에 있어 유선으로 됨으로써, 클러스터 내의 모든 채널 프로세서는 동일한 직렬 입력을 수신한다. 모든 채널 프로세서들이 동일한 타이머에 의해 제어되도록 하기 위해 군집화된 채널 프로세서를 구성하는 것이 또한 가능하다. 공유된 메모리에서 세마포어(semaphore)로서 구현된 토큰은, 결국, 클러스터 내의 채널 프로세서 동작을 조화시키기 위해 사용된다. 군집은 클러스터에 속하는 채널 프로세서 내에 구성 레지스터를 셋팅함으로써 이루어진다.
도 13은 바람직한 실시예에서 군집을 허용하는 배열에 대한 상세한 내용을 제공한다. 4 개의 채널 프로세서{307(j, 0...3)}의 클러스터{309(j)}가 도시되어 있다. 클러스터로의 입력은 다음과 같이 군집화된다: 각각의 채널 프로세서{307(j, k)}는 28 개의 클러스터 I/O 핀(1301)을 제공하는 7 개의 I/O 핀{CPP(0...6)}을 구비한다. 클러스터 I/O 핀{1301(0)}은 채널 프로세서 I/O 핀{1303(0, 0)}이고, CLP{1301(2)}는 CPP{1303(0, 1)}이며, CLP{1301(27)}까지 계속 이러한 관계를 유지하고 상기 CLP{1301(27)}은 CPP{1303(3, 6)}이다. 핀들이 상호연결됨으로써 CLP{1301(0)}, CLP{1301(7)}, CLP{1301(14)} 및 CLP{1301(21)} 중 임의의 CLP에서의 입력은 CPP{(1303)(0, 0), 1303(1, 0), 1303(2, 0), 및 1303(3, 0)} 모두에서 동시에 수신된다. 출력은 도 12에 도시된 것처럼 셀/프레임 군집 경로(1223)를 통해 군집화된다. 도 12에 도시된 바와 같이, 각 TxSDP{425(j,i)}로부터의 출력(1441, 1223)은 클러스터 내에 있는 TxSDP(427) 각각의 멀티플렉서(1208)에 연결되고, 따라서 주어진 TxSDP{425(j, i)}는 클러스터의 다른 TxSDP(427)들 중 임의의 TxSDP 내에 있는 대형 FIFO(2122)로부터 출력을 수신할 수 있고 대형 FIFO(1023) 다음의 장치에서 출력을 처리할 수 있다. 주어진 RxSDP(421)나 TxSDP(427)가 그것의 클러스터에 관련하는 방법이 SDP 모드(627)에서 비트로 설정됨으로써 결정된다.
각각의 채널 프로세서(307)는 상기 프로세서로 하여금 11 개의 클럭 출력들 중 하나의 출력을 선택하도록 허용하는 클럭 멀티플렉서(1307)를 또한 구비한다. 클럭 입력들 중 8 개의 입력인 외부 글로벌 클럭 입력{1309(0...7)}은 디지털 채널 프로세서{IC(203)}로의 외부 클럭에 대한 것이고; 클럭 입력들 중 2 개의 입력인 CPGLC(1311)은 하나의 채널 프로세서에 의해 복구되고 다른 채널 프로세서에 제공되는 글로벌 클럭 입력이며, 입력들 중 하나의 입력인 로컬 클럭(1313)은 디지털 채널 프로세서{IC(203)}에 대한 로컬 클럭에 대한 것이다.
클러스터에 의한 채널 프로세서의 처리에 대한 조화는 토큰링으로 이루어진 3 개의 세트를 통해 달성된다: TxSDP 토큰 링(1225)은 클러스터의 TxSDP(427)에 있는 Tx바이트 프로세서(1213)로부터의 출력과 조화를 이룬다. 단지 토큰을 갖는 TxSDP(427)만이 대형 FIFO(1211)로 출력한다. 도 10에 도시된 바와 같이, RxSDP(421) 내의 어떤 장치가 제공하는 지는 3 개의 토큰 링, 즉 Rx 비트 프로세서(1005)를 위한 링(1027), Rx 동기 프로세서(1017)를 위한 링(1017), 및 Rx 바이트 프로세서(1013)를 위한 링(1028)에 의해 결정된다. 토큰링을 구비하고 또한 인에이블되는 RxSDP(421)내의 장치는 오로지 토큰을 가지는 경우에만 출력을 제공할 것이다. 어느 토큰링이 사용되는가의 여부는 RxSDP(421)내의 어느 장치가 인에이블되는가에 의존한다. TxSDP(427) 및 RxSDP(421)에 대한 링 내의 토큰은 전달되어 TxSDP 및 RxSDP에 의해 실행되는 마이크로코드를 통해 테스트된다. 채널 프로세서 토큰 링(1315)은 군집 내의 채널 프로세서를 통해 글로벌 버스(319)로의 기록 액세스를 제어한다. 현재 링(1315)의 토큰을 가지고 있는 채널 프로세서만이 글로벌 버스(319)로의 기록 액세스를 가질 수 있다. 채널 프로세서 토큰 링(1315)은 클러스터의 채널 프로세서에 의해 공유된 클러스터 메모리(503)에 있는 세마포어를 통해 구현된다.
또한 군집은 도 14에 도시된 클러스터 내에 있는 로컬 및 공유된 메모리의 배열을 통해 지원된다. 이러한 배열의 결과는 클러스터 메모리(503)이다. 클러스터 메모리(503)는 클러스터{309(j)} 내의 각 채널 프로세서(0...3)를 위한 채널 프로세서 로컬 메모리(503)를 포함한다. 각각의 채널 프로세서 메모리{503(j, i)}는 직렬 데이터 프로세서를 위한 채널 프로세서{307(j, i)} 메모리(1403), DMEM(405), 버스 제어 메모리(1405), CPRC(401)를 위한 메모리(1407), 및 지시 메모리(403)의 일부분을 포함한다. 클러스터 내의 각 채널 프로세서(307)는 클러스터 경로(439)를 통해 클러스터 내에 있는 각 다른 채널 프로세서 내의 DMEM(405)에 액세스한다. 다른 채널 프로세서 내에 있는 DMEM(405)으로의 액세스는 1-사이클의 회전 지연시간(latency)를 갖는다. 지시 메모리는 공유된 IMEM(1409)과 같이 모든 4 개의 채널 프로세서간에 공유하기 위해 통신 프로세서(203)가 초기화 될 때 구성될 수 있고, 또는 모든 4 개의 채널 프로세서{IMEM(403)}간에 분할될 수 있다. 지시 메모리가 공유된 IMEM(1409)으로서 구성될 때, 클러스터 내에 있는 4 개의 채널 프로세서 각각은 공유된 IMEM(1409)으로서 구성되고, 클러스터 내에 있는 4 개의 채널 프로세서 각각은, 고정된 라운드-로빈 순서에 따라 한 사이클에 한번, 공유된 IMEM(1409)으로의 액세스가 제공된다. 공유된 IMEM(403)은 채널 프로세서나 그것의 클러스터의 프로그래머로 하여금 개별적인 채널 프로세서의 증가된 융통성에 대해서 채널 프로세서를 위한 더 큰 프로그램을 교환하도록 허용한다.
군집화된 채널 프로세서의 동작에 대한 예 : 도 26 및 도 27
군집화된 채널 프로세서가 기가비트의 이더넷을 처리할 때, 수신기는 4 개의 채널 프로세서로 이루어진 클러스터{309(i)}이고, 송신기는 4 개의 채널 프로세서로 이루어진 다른 클러스터{309(j)}이다. 도 26은 RxSDP{421(i, 0...3)}가 어떻게 구성되는지를 나타내고, 도 27은 TxSDP(427(j, 0...3)}이 어떻게 구성되는지를 나타낸다. 두 클러스터{309(i) 및 309(j)}는 송신기 내의 채널 프로세서들 중 하나의 프로세서의 수신 클럭이 두 클러스터를 위한 주(master) 수신 클럭이 되도록 구성된다. 송신 클러스터 내의 모든 채널 프로세서는 기가비트의 이더넷 클럭을 위한 외부 글로벌 클럭(1309) 내에서 신호를 선택한다. 클러스터의 CP(307) 내에 있는 CPRC(401)간의 동기는 클러스터 메모리(503) 내의 세마포어를 통해 달성된다.
RxSDP의 군집화 : 도 26
도 26에 도시된 바와 같이, 각각의 RxSDP는 디코더(1001), Rx비트 프로세서(1005), 및 Rx바이트 프로세서(1013) 이외의 프로세서가 우회되도록 구성된다. 디코더(1001)는 3-비트 동기 손실 출력(2603)을 CPRC(401)에 제공한다. Rx비트 프로세서(1005)에 의한 입력의 수신은 토큰 버스(1027)에 의해 제어되고, Rx바이트 프로세서(1013)에 의한 출력은 토큰 버스(1028)에 의해 제어된다. 따라서, Rx 비트 프로세서는, 단지 그것이 토큰을 가질 때, 소형 FIFO(1003)의 내용에 대한 그것의 처리 결과를 대형 FIFO(1011)에 출력하고, 마찬가지로, Rx 바이트 프로세서(1013)는, 단지 그것이 토큰을 가질 때, 대형 FIFO(1011)이 내용에 대한 그것의 처리 결과를 출력한다.
바람직한 실시예에서, 각각의 채널 프로세서는 그것이 토큰이 가지고 있는 동안 하나의 기가비트 이더넷 데이터 프레임을 수신하고, 상기 채널 프로세서가 프레임을 수신할 때, 상기 채널 프로세서는 토큰을 클러스터 내의 다음 채널 프로세서에 전달하고, 그것이 막 수신한 프레임을 처리한다. 앞서 설명된 바와 같이, 하나의 데이터 처리 결과는 데이터에 대한 설명자이다. 채널 프로세서는 글로벌 버스(319)를 통해 인큐 명령을 큐 관리 엔진(305)에 있는 메일박스(511)에 기록되고, 큐 관리 엔진(305)은 설명자를 인큐시킴으로써 명령에 응답한다. 공유된 메모리에 세마포어로서 구현된 토큰은, 결국, 수신 클러스터 내의 주어진 채널 프로세서가 토큰을 가질 때에만 글로벌 버스(319)에 기록할 수 있도록 하기 위해서, 수신 클러스터의 구성원들을 통해, 글로벌 버스로의 액세스를 조정하도록 사용된다.
TxSDP의 군집화 : 도 27
도 27은 출력 클러스터 내의 TxSDP{427(j, 0...3)}이 어떻게 설정되는지를 나타낸다. 도 27에서 알 수 있는 바와 같이, 인에이블되는 TxSDP(j, 1...3)의 일부만이 Tx 바이트 프로세서(1213), 대형 FIFO(1223), 및 군집 경로(1223)이다. 출력 스트림의 나머지 처리는 TxSDP(j, 0)에 의해 수행되고, 여기서 Tx 비트 프로세서(1205)와 엔코더(1201)뿐만 아니라 Tx 바이트 프로세서(1213)가 인에이블된다. 주어진 TxSDP{427(j, k)}가 토큰 버스(1225)를 통해 토큰을 가질 때, 그것의 Tx 바이트 프로세서(1213)는 대형 FIFO와 군집 경로(1223)를 통해 데이터를 TxSDP{427(j, o)}로 출력하고, 그런 후에 멀티플렉서(1228)에서 적절한 입력을 선택하며, 멀티플렉서(1208) 다음의 인에이블된 프로세서에서 입력을 처리한다.
구성(2701)에 있어서, 클러스터 내의 각 채널 프로세서(307)는 기가비트의 이더넷 데이터 프레임을 차례로 출력한다. 이미 설명된 바와 같이, 채널 프로세서(307)는 송신될 프레임에 대한 프로토콜 데이터 유닛의 설명자를 획득하기 위해서 QME(305)에 디큐 명령을 발행함으로써 시작한다. CP 토큰링(1315)은, 송신 클러스터 내의 채널 프로세서가 정확한 순서로 설명자를 획득하는 것을 보장하기 위해 사용된다. 송신 클러스터 내의 채널 프로세서는, 단지 채널 프로세서가 CP 토큰링(1315)내에 토큰을 가지고 있는 경우에만, 디큐 명령을 큐 관리 엔진(305)에 제공하기 위해서 글로벌 버스(319)를 액세스할 수 있다. 일단 채널 프로세서가 출력될 데이터에 대한 설명자를 갖는다면, 상기 채널 프로세서는 그것의 Tx 바이트 프로세서(1213) 내의 데이터를 처리하기 시작할 수 있다. 상기 데이터는, 단지 tx 바이트 프로세서(1213)가 토큰링(1305)에 의해 제공된 토큰을 가질 때에만, Tx 바이트 프로세서(1213)로부터 출력될 수 있다. Tx 바이트 프로세서(1213)로부터의 출력은 군집 경로(1223)를 통해 TxSDP(j, 0)로 가고, 상기 TxSDP(j, 0)에서 상기 출력은 출력된다. 또한, 상기 배열은 클러스터 내의 주어진 채널 프로세서가 출력될 프레임을 처리하도록 하는 한편, 송신 클러스터 내의 다른 채널 프로세서가 그것들의 프레임을 출력하도록 한다.
OC-12c를 위한 클러스터는, 클러스터 내의 4 개의 채널 프로세서 중 2 개의 채널 프로세서가 수신을 위해 구성되고 나머지 2 개의 채널 프로세서가 송신을 위해 구성되는 것을 제외하고는, 실질적으로 상술된 바와 같이 동작한다. 토큰링은, 0C-12c가 ATM 셀을 송신하기 위해서 사용될 때, 토큰링(11017)은 수신 채널 프로세서의 수신 동기 프로세서(1009)를 제어하는 것을 제외하고는, 상술된 것처럼 사용된다.
실행 프로세서{XP(313)}의 상세한 설명 : 도 15
XP(313)는 MIPS IV 지시 세트를 구현하는 범용 CPU이다. 상기 범용 CPU는 디지털 통신 프로세서(203)에서 다음의 기능을 수행한다:
ξ DCP(203)을 리셋팅 및 초기화;
ξ 프로그램을 채널 프로세서(307) 및 패브릭 프로세서(303)에 로딩하고 그것들의 동작을 위한 파라미터를 설정;
ξ 테이블 룩업 엔진(301)에 의해 사용되는 변환 테이블(209)을 설정 및 유지하고, 테이블 룩업 엔진(301)에 있는 레지스터를 설정;
ξ 예외 상황(exceptions)을 처리;
ξ DCP(203)의 실-시간 동작 시스템을 가동; 및
ξ 호스트가 현존할 때 그 호스트(227)를 인터페이싱
호스트(227)를 인터페이싱하는 것은 가변적인 크기의 윈도우(window)를 호스트(227)에게 글로벌 어드레스 공간(321)으로 제공하는 것을 포함하고, XP(313)가 호스트(227)로부터 수신하거나 호스트(227)로 송신하는 패킷을 처리하는 것 또한 포함할 수 있다.
도 15는 XP(313)의 블록도이다. 상기 XP(313)는 채널 프로세서(307)와 동일한 많은 구성요소를 갖는다. 채널 프로세서와 같이, XP는 링 버스(311), 페이로드 버스(313), 및 글로벌 버스(319)에 연결된다. 기본 처리 소자는, CPRC(401)와 같이, XP RISC 코어 프로세서(1501)이다. 링 버스(311)에의 인터페이스(1515), 두 뱅크(bank)(1507 및 1508)로 이루어진 로컬 데이터 메모리, 페이로드 버스(317)에 대한 인터페이스(1511), 및 글로벌 버스(319)에 대한 인터페이스(1513)가 제공된다. DMEM(1507)과 DMEM(1508)은 모두 페이로드 버스 인터페이스(1511)를 통해 액세스가능하고, 실제로 페이로드 버스(315) 상에 있는 노드들과는 별개이다. 단지 DMEM(1507)만이 글로벌 버스 인터페이스(1513)를 통해 액세스가능하다. 채널 프로세서 내에 제공되지 않는 XP(313) 내의 인터페이스는 범용 I/O 인터페이스(1517), PROM 인터페이스(1525), 및 PCI 인터페이스(1523)를 포함한다. 지시 메모리(IMEM : instruction memory)(1503)는 3 개의 구성요소, 즉 로드가능한 지시 메모리(1503), 지시 판독 전용 메모리(1504), 및 지시 메모리 로더(1506)를 구비하고, 상기 지시 메모리는 XPRC(1501)이 DRAM(229)로부터 IMEM(1503)을 로딩하기 위해 실행하는 프로그램을 포함하고 있다. XP RISC 코어(1501)에 의해 실행되는 코드와 상기 코드의 실행에 사용되는 데이터는 SDRAM(229)에 저장되고, XP RISC 코어(1501)에 의해 필요 할 때, DMA를 통해 SDRAM(229)으로부터 DMEM(1507), DMEM(1508), 및 IMEM(1503)으로 이동된다. 채널 프로세서(307)와 마찬가지로, XP(313)은 글로벌 액세스 공간(321)에 액세스한다. XP/CP 구성 레지스터(1517)는 XP(313) 내의 글로벌 어드레스 공간(321)의 일부이다.
실행 프로세서(313)에 의해 수행되는 기능의 상세한 설명
실행 프로세서(XP: Executive Processor)(313)는 리셋 신호를 각각의 채널 프로세서(307)에 보냄으로써 디지털 통신 프로세서(DCP : Digital Communications Processor)(203) 내에 수신된 칩 리셋 신호에 응답한다. 그 결과, XP(313)는 초기화 코드를 실행시키기 시작한다. 초기화 코드는 PCI 인터페이스(1523) 및 글로벌 버스(317)를 통해 SDRAM(229)에 사전 로딩될 수 있고, 또는 PROM 인터페이스(1521)에 연결된 선택적인 외부 PROM에 포함될 수 있다. 초기화 코드는 각 채널을 위한 IMEM(403)뿐만 아니라 클러스터를 위한 공유된 IMEM(1409)을 로드하고, RxSDP(421) 및 TxSDP(427)에 의해 실행되는 프로그램을 로드하며, 글로벌 어드레스 공간(321)에 구성 정보를 로드한다.
일단 디지털 통신 프로세서(203)가 초기화되면, XP(313)는 디지털 통신 프로세서(203)를 위한 실-시간 동작 시스템을 실행하고, 네트워크를 감시하는 프로토콜을 지원하며, 채널 프로세서에 의해 신호가 보내진 예외상황을 처리한다. XP(313)는 채널 프로세서, 패브릭 프로세서(303), 큐 관리 엔진(305), 및 버퍼 관리 엔진(315)을 관리하기 위해서 글로벌 어드레스 공간(321)으로의 액세스를 또한 사용한다. 상기 XP는 테이블 룩업 엔진(TLE : Table Lookup Engine)(301)을 관리하기 위해서 링 버스(311)로의 인터페이스를 사용한다. 하나의 관리 기능은 변환 테이블(209) 내의 변환 테이블 엔트리(211)를 삽입 및 제거하는 것이고; 다른 관리 기능은 통계 테이블을 관리하는 것이다. 변환 테이블(209)과 버퍼 관리 엔진(315)을 관리하는 능력은 XP(313)로 하여금 DCP(203) 내에 입력 포트와 출력 포트 사이의 관계를 구성하는 것을 가능하게 한다.
호스트(227)가 제공되는 경우에, XP(313)는 DCP(203)의 글로벌 어드레스 공간에 호스트에 대한 가시성을 제공하고, 그것을 위한 TLE(301)에 의해 관리되는 테이블을 판독할 수 있다. XP(313)는 호스트(226)로부터 수신된 패킷이나 호스트(226)에 대해 예정된 패킷을 위한 패킷 트랜시버로서 더 서비스할 수 있다. 일예로, 호스트(227)는 인터넷 프로토콜 노드일 수 있고, 따라서 인터넷 패킷을 수신 또는 송신할 수 있다. 패킷 트랜시버로서, XP(313)는, 그것의 I/O 인터페이스가 PCI 버스인 것을 제외하고는, 채널 프로세서와 본질적으로 동일한 형태로 동작한다.
패브릭 프로세서(303) : 도 16 내지 도 20
도 3에 도시된 바와 같이, 패브릭 프로세서(FP : Fabric Processor)(303)는 디지털 통신 프로세서(203)와 스위칭 패브릭(switching fabric)(222) 사이의 인터페이스를 관리한다. 스위칭 패브릭(222)은 통신 프로세서(203)와 같은 다수의 스위칭 장치들 사이의 통신에 사용된다. 도 19는, 1901에서, 다수의 DCP{203(1...x)}가 각각 FP{303(i)}를 통해 어떻게 스위칭 패브릭(222)에 연결될 수 있는지를 나타낸다. DCP{203(i)}에 속하는 직렬 입력{204(i, j)}에 수신되는 패킷은 FP{303(i)} 및 스위칭 패브릭(222)을 통해 다른 DCP(k)에 경로지정될 수 있고, 여기서 상기 패킷은 FP{303(k)}에 수신되고 직렬 출력단{206(k, l)}에서 출력된다.
데이터는 패브릭 프레임으로서 패브릭(222)을 통해 이동한다. 정확한 패브릭 프레임의 형태는 스위칭 패브릭에 따라 변할 것이지만, 패브릭 프레임은 일반적으로 도 18에 도시된 부분들을 갖는다:
ξ 패브릭 헤더(1803)는 패브릭(222)이 상기 패브릭(222) 내에서의 경로지정 및 흐름 제어를 위해 사용하는 정보를 포함한다;
ξ 프레임 헤더(1805)는 입력 패브릭 프레임(1801)을 패브릭(222)에 입력하는 소스 장치가 패브릭(222)으로부터 프레임(1801)을 수신하는 목적지 장치에게 제공하는 정보를 포함한다;
ξ페이로드(1807)는 네트워크로부터 소스 장치에 수신되었다가, 목적지 장치에 의해 네트워크로 출력될 페이로드이다.
이후에 더 상세하게 설명되는 바와 같이, 패브릭 프로세서(303)는 여러가지 종류의 패브릭 프레임을 처리하기 위해서 프로그램될 수 있다. 바람직한 실시예에서, 패브릭 프로세서(303)는 고정된 길이(FL : Fixed Length)(1809)를 갖는 프레임을 처리하도록 프로그램될 수 있다. 상기 고정된 길이는 32 바이트와 128 바이트 사이의 범위일 수 있다.
패브릭 프로세서(303)는, 직렬 포트 대신에 스위칭 패브릭(222)으로부터 입력을 수신하고 또한 스위칭 패브릭(222)에 출력을 제공하는 것을 제외하고는, 본질적으로 채널 프로세서(307)와 동일한 기능을 한다는 것이 앞서 설명된 논의로부터 명확해질 것이다. 그러한 차이는 중요한 결과를 갖는다. 첫째로, 스위칭 패브릭(222)은 직렬 입력 및 출력 대신에, 병력 입력을 수신하고 병렬 출력을 제공한다. 입력 또는 출력의 폭은 스위칭 패브릭에 좌우되는데; 바람직한 실시예에서, 패브릭 프로세서(303)는 클럭 사이클 당 8, 16, 또는 32 비트의 폭으로 데이터를 출력하도록 프로그램될 수 있다.
둘째로, 패브릭 프로세서(303)는 채널 프로세서(307) 보다 더 높은 속도로 데이터를 처리하여야 한다. 이것에 대한 이유 중 하나는 입력 및 출력이 직렬 대신에 병렬이기 때문이며; 다른 이유로는 스위치 패브릭(222)이 다른 장치들과 공유되기 때문이고, 또한 패브릭 프로세서(303)가 스위치 패브릭(222)으로부터 데이터를 수신할 수 있는, 그리고 그것을 스위치 패브릭(222)에 제공할 수 있는 속도가 그들 장치 모두의 속도와 작업처리량에 마찬가지로 영향을 주기 때문이다. 필요한 동작 속도를 달성하기 위해서, 패브릭 프로세서(303)는 유한 상태기(finite state machine)의 쌍으로서 구현된다. 바람직한 실시예서 유한 상태기는 다음의 특성을 갖는 패브릭 프레임(1801)을 처리한다:
ξ 프레임은 사전 결정된 길이를 갖는다;
ξ 데이터는 고정된 길이를 갖는 패브릭 헤더(1803)는 데이터에 선행한다;
ξ 스위칭 패브릭은 패브릭 헤더 내의 목적지 비트 마스크를 통해 멀티캐스팅(하나 이상의 목적지로 패킷을 동시에 경로지정하는 것)을 구현한다;
ξ 적체 정보(congestion information)가 단순 상태기(simple state machine)를 통해 패브릭 헤더로부터 추출될 수 있다;
ξ 연속적인 관련 패브릭 프레임(1801) 내의 제 1 패브릭 프레임(1801)에 대한 관계가 결정적이다.
패브릭 프로세서(303)의 상세한 설명 : 도 16
도 16은 패브릭 프로세서(303)의 블록도이다; 채널 프로세서를 나타내는 도 4에 대한 그것의 일반적인 유사성이 곧 명확해 질 것이다. 채널 프로세서(307)와 마찬가지로, 패브릭 프로세서(303)는 페이로드 버스(317), 글로벌 버스(319), 및 링 버스(311)에 연결된다. 따라서, 그것은 프로토콜 데이터 유닛을 SDRAM(229)에 제공할 수 있고, 또한 그로부터 프로토콜 데이터 유닛을 수신할 수 있으며, 글로벌 어드레스 공간(321)을 액세스할 수 있고, 테이블 룩업 엔진(301)에 메시지를 제공할 수 있고, 또한 그로부터 메시지를 수신할 수 있다. 거기에는 3 가지의 주요한 차이점이 있다:
ξ Rx 패브릭 프로세서(1617)와 Tx 패브릭 프로세서(1621)는 32-비트 버스(1619 및 1623)를 통해 패브릭(222)에 연결된다;
ξ 패브릭 제어 엔진(1601)은 완전하게 프로그램가능한 RISC 프로세서가 아니지만, 대신에 2 개의 파라미터화 가능한 상태기이다: 패브릭 프로세서(303)에 수신된 프레임(1801)을 처리하는 Rx 패브릭 제어 엔진(1604) 및 패브릭 프로세서(303)로부터 출력될 프레임(1801)을 처리하는 Tx 패브릭 제어 엔진(1602); 및
ξ 패브릭 제어 엔진(1601)은 큐 관린 엔진(305)으로의 직접적인 연결(1625 및 1627)을 갖고, 그럼으로써 글로벌 버스(319)를 통해 이용가능한 액세스보다 덜 시간적인 변동을 갖는 큐 관리 엔진(305)으로의 액세스를 달성한다.
패브릭 프로세서(303)의 동작은 일반적으로 채널 프로세서(307)의 동작과 유사하다. 스위칭 패브릭(222)에 따라, 패브릭 프레임(1801)은 8, 16, 또는 32-비트의 청크로 Rx 패브릭 데이터 프로세서(1617)에 수신된다. Rx 패브릭 데이터 프로세서(1617)는 페이로드(1807)와 헤더(1803과 1805)를 분리한다. 헤더 내의 정보 중 일부는 추출 공간(1613)으로 가고, 여기서 상기 정보는 Rx 패브릭 제어 엔진(1604)에 의한 이용을 위해 사용가능하다; Rx 패브릭 데이터 프로세서(1617)는 TLE(301)를 위한 메시지를 만들기 위해서 정보 중 다른 일부를 사용한다; 이 정보는 링 버스 인터페이스(1611)와 링 버스(311)를 통해 TLE(301)에 보내진다. 프로토콜 데이터 유닛은 멀티플렉서(1605), DMEM(1603), 및 페이로드 버스(317)를 통해 SDRAM(229) 내의 버퍼{231(i)}로 DMA된다. Rx 패브릭 제어 엔진(1604)은, 프로토콜 데이터 유닛을 위한 설명자(217)를 만들기 위해, Rx 패브릭 데이터 프로세서(1617)에 의해 보내진 링 버스 메시지에 반응하여 버퍼{231(i)}를 위한 버퍼 태그(233), 추출 공간(1513) 내의 헤더 정보, 및 TLE(301)로부터 수신된 정보를 사용한다; 큐 관리 엔진(305)으로의 전용 연결(1625)을 사용하여, 패브릭 제어 엔진(1601)은 설명자에 대한 인큐 동작을 수행한다.
송신 처리는 Tx 패브릭 제어 엔진(1602)에 의해 수행된다. Tx 엔진(1602)은 스위칭 패브릭(222)에 의해 도달가능한 목적지를 명시하는 설명자(217)를 위해 큐 관리 엔진(305)이 유지하고 있는 큐(215)로부터 설명자를 판독한다. 패브릭 프로세서(303)는 큐의 헤드로부터 설명자를 판독한다. 각각의 설명자에 대해서, Tx 엔진은 설명자의 버퍼 태그(233)에 의해 명시된 데이터에 대한 패브릭 프레임(1801)의 헤더(1803 및 1805)를 만들기 위해 필요한 정보로 병합 공간(1615)을 설정하도록 설명자 내의 정보를 사용하고, 또한 페이로드 버스(317), DMEM(1603), 및 멀티플렉서(1605)를 통해 버퍼 메모리(229)로부터 Tx 패브릭 데이터 프로세서(1621)로의 DMA를 초기화하기 위해 설명자의 버퍼 태그(233)를 사용하며, 다음으로 Tx 패브릭 데이터 프로세서는 헤더(1803 및 1805)를 만들기 위해서 병합 공간(1615) 내의 정보를 사용하고 페이로드를 만들기 위해서 DMA된 프로토콜 데이터 유닛을 사용한다. Tx 패브릭 데이터 프로세서(1621)가 패브릭 프레임(1801)을 만들 때, 상기 프로세서(1621)는 버스(1623)를 통해 8, 16, 또는 32-비트 청크로 데이터를 스위치 패브릭(222)에 출력한다.
Rx 패브릭 데이터 프로세서(1617)와 Tx 패브릭 데이터 프로세서(1621)의 상세한 설명 : 도 17
도 17은 Rx 패브릭 데이터 프로세서(1717)와 Tx 패브릭 데이터 프로세서(1621)에 대한 상세한 블록도이다. Rx 패브릭 데이터 프로세서(1717)에서 시작하면, Rx 패브릭 데이터 프로세서(1717)는 입력 데이터 버스(1619)에 연결된 FIFO(1708), 패브릭 헤더 해석기(1707), 헤더-페이로드 분리기(1703), 페이로드 FIFO(1705), 및 헤더 추출기 및 해석기(1701)를 포함한다. 페이로드 FIFO(1705)는 버스(1616)를 통해 멀티플렉서(1605)에 연결되고, 헤더 추출기 및 해석기(1701)는 경로(1614)를 통해 추출 공간(1613)에 연결되며 경로(1616)를 통해 링 버스 인터페이스(1611)에 연결된다. 구성요소(1701, 1703, 및 1707)은 RxSDP(421)와 TxSDP(427)에 사용되는 동일한 유형의 프로그램가능한 마이크로시퀀서를 사용하여 구현된다.
Rx 패브릭 데이터 프로세서(1617)는 일반적으로, 어떠한 직렬-병렬 데이터 변화도 수행되지 않는 것을 제외하고는, RxSDP(421)의 동작과 유사하다. 스위치 패브릭(222)으로부터 수신된 패브릭 프레임(1801)의 바이트는 먼저 FIFO(1708)로 가고, 이는 패브릭 프로세서(303)와 패브릭(222)이 다양한 클럭 속도로 가동할 수 있게 한다. 스위치 패브릭(222)은 FIFO(1708)의 테일(tail)에 기록하고, 한편 패브릭 헤더 해석기(1707)는 FIFO(1708)의 헤드로부터 판독한다. 패브릭 헤더 해석기(1707)는 패브릭 헤더(1803)를 판독하고, 패브릭 헤더(1803)의 선택된 부분을 추출 공간(1613)으로 출력한다. 다음 처리 단계는 헤더-페이로드 분리기(1703)인데, 상기 분리기(1703)는 페이로드(1807)와 프레임 헤더(1808)를 분리하고 상기 페이로드를 FIFO(1705)로 보내며, 거기서부터 상기 페이로드는 버퍼 메모리(229)에 DMA된다. FIFO(1705)는 DMEM(1603)으로의 DMA 액세스가 가능하게 될 때까지 페이로드를 유지하기에 충분히 크다. 다음으로 프레임 헤더(1808)는 헤더 추출기 및 해석기(1701)로 가고, 상기 헤더 추출기 및 해석기(1701)는 헤더를 해석하고, 상기 헤더로부터의 정보를 추출 공간(1613) 및/또는 링 버스 인터페이스(1611)로 출력한다.
Tx 패브릭 데이터 프로세서(1621)는 3 개의 프로그램가능한 구성요소와 2 개의 FIFO를 구비한다. Rx 패브릭 데이터 프로세서에서처럼, 프로그램가능한 구성요소는 마이크로시퀀서를 사용하여 구현된다. 프로그램가능한 구성요소는 헤더 생성기(1709)를 포함하는데, 상기 헤더 생성기(1709)는 패브릭 제어 엔진(1601)이 병합 공간(1615)에 배치한다는 정보를 사용하여 프레임 헤더(1805)를 생성하고, 또한 헤더 및 페이로드 병합부(1711)를 포함하는데, 상기 헤더 및 페이로드 병합부(1711)에서는 경로(1620)를 통해 버퍼 메모리(229)로부터 DMA된 페이로드(1807)를 헤더(1805) 와 병합하고, 또한 패브릭 헤더 병합기(1715)를 포함하는데, 상기 패브릭 헤더 생성기(1715)는 패브릭 헤더(1803)를 생성하고 프레임(1801)이 스위치 패브릭(222)에 출력되기 전에 상기 패브릭 헤더(1803)를 프레임(1801)에 추가한다. FIFO(1717)은 패브릭 프로세서(303)와 스위치 패브릭(222)이 다양한 속도로 가동할 수 있게하고, FIFO(1713)는 DMEM(1603)으로의 액세스에서 지연을 처리하기 위해 필요한 융통성을 제공한다.
DCP(203)를 사용하는 스위칭 시스템의 구성 : 도 19 및 도 20
패브릭 프로세서(303)는 DCP(203)가, 상술된 제약을 따르는 프레임(1801)을 보낼 수 있고 또한 수신할 수 있는 임의의 스위칭 구성요소와 쉽게 상호작용할 수 있게 한다. 도 19 및 도 20은 많은 가능한 구성들 중 3 개의 구성을 나타내고 있다. 구성(1901)에서 다수의 DCP는 이미 상세하게 논의되었던 스위칭 패브릭(222) 하나를 공유한다; 구성(1905)에서, 별도의 스위칭 패브릭은 존재하지 않는다; 대신, 스위치가 2 개의 DCP(203)를 그것들의 패브릭 프로세서(303)를 통해 서로 연결함으로써 구성된다. 그러한 시스템은 몇몇 DCP(203)의 패브릭 프로세서를 버스에 연결하고, 송신 DCP(203)에 의한 액세스를 조정하기 위한 토큰링이나 몇몇 다른 메커니즘을 버스에 제공함으로써 확장될 수 있다.
구성(2001)에서, 스위칭 패브릭(222)은 다수의 DCP(203)뿐만 아니라 DCP(203)에 의해 처리되지 않는 라인 인터페이스(2003)에 대한 논-DCP 로직(2002)에 연결된다. 그러한 구성(2001)은 사전에 존재하는 장치를 DCP(203)를 사용하는 스위칭 시스템에 집적하기 위해서 사용될 수도 있다.
테이블 룩업 엔진(301) 및 변환 테이블 메모리(207)에 대한 상세한 설명 : 도 21 내지 도 24
앞서 언급된 바와 같이, 테이블 룩업 엔진(301)은 채널 프로세서(307), 패브릭 프로세서(303), 및 실행 프로세서(313)로부터 링 버스(311)를 통해 수신된 메시지에 응답하여 변환 테이블 메모리(207)에 있는 변환 테이블(209)을 통해 테이블 룩업 동작을 수행하고, 동작의 결과로 메시지를 수신했던 장치로 링 버스 메시지를 반환한다.
도 21은 변환 테이블 메모리(207)에 대한 현재의 바람직한 실시예를 상세하게 나타낸다. 변환 테이블 메모리(207)는 64-비트 폭의 파이프라인된 버스팅 스테틱 RAM 모듈을 사용하여 구현된다. 메모리(207)는 8 개의 테이블 풀{2101(0...7)}로 세분화된다. 테이블 풀은, 비록 주어진 테이블 풀 내의 모든 테이블 엔트리가 동일한 크기를 갖는다 하더라도, 서로 다른 크기일 수 있고 서로 다른 크기의 테이블 엔트리로 세분화될 수 있다. 2 개의 그러한 테이블 엔트리, 즉 링크 테이블 엔트리(2111)와 데이터 테이블 엔트리(2119)가 도 21에 도시되어 있다. 테이블 풀(2101)은 연속하는 테이블 엔트리로 구성된 구성요소 테이블(2106)로 더욱 세분화된다. 2 개의 이러한 구성요소 테이블, 즉 테이블 풀{2101(1)} 내의 링크 테이블(2107)과 테이블 풀{2101(7)} 내의 데이터 테이블(2117)이 도 21에 도시되어 있다. 각각의 테이블 엔트리는 그것이 속한 구성요소 테이블(2106)에 인덱스(index)를 갖는다; 따라서, LTE(2111)는 링크 인덱스(2109)를 갖고, DTE(2119)는 데이터 인덱스(2114)를 갖는다. 구성요소 테이블(2106) 내의 엔트리는 그것의 인덱스를 테이블 풀 내의 엔트리 크기와 곱하고, 구성요소 테이블(2106)의 개시 위치에 그 결과를 더함으로써 위치지정된다.
두 종류의 일반적인 구성요소 테이블(2106), 즉 링크 테이블과 데이터 테이블이 존재한다. 두 종류의 구성요소 테이블(2106)은 데이터 테이블 내에 있는 데이터와 관련되는 키와 함께 사용된다. 일예로, 변환 테이블(209)은 ATM 패킷에 대한 설명자를 수신하게 되는 큐 메모리(213) 내의 다수의 큐(215)로 ATM 패킷의 헤더에 있는 VPI/VCI 쌍을 변환 할 수 있다. VPI/VCI 쌍은 키이고, 키에 의해 위치지정되는 데이터 테이블 엔트리(2119)는 다수의 큐를 포함한다. 검색 알고리즘은 키가 어떻게 변환 테이블에서 사용되는지를 결정한다. 링크 테이블은 다른 인덱스 테이블 엔트리나 데이터 테이블 엔트리의 인덱스들을 포함한다; 그것은 데이터 테이블 엔트리(2119)를 위치지정하기 위해서 변환될 키와 함께 사용된다.
링크 테이블 엔트리는 다른 엔트리를 위치지정하기 위해서 사용된다는 사실로부터 예상되는 바와 같이, 링크 테이블 엔트리(2111)는 제어 정보(2113) 및 링크 정보(2115)를 포함한다. 제어 정보(2113)는 링크 정보(2115) 내의 인덱스들 중 어느 것이 수반될지를 결정하기 위해서 변환되는 키와 함께 사용된다. 제어 정보(2113)와 링크 정보(2115)의 정확한 특성은 링크 테이블(2107)이 속하는 변환 테이블(2109)을 위한 검색 알고리즘에 의해 결정된다. 데이터 테이블 엔트리(2119)는 키(2120)와 데이터(2121)를 포함한다. 변환되는 키가 키(2120)와 일치할 때, 엔트리(2119) 내의 데이터(2121)는 키의 변환, 일예로 VPI/VCI 쌍에 대한 큐 번호의 변환을 포함한다.
변환 테이블(209)은 바람직한 실시예에서 검색 알고리즘 번호(2125)로써 명시된다. 검색 알고리즘 번호는 데이터 구조(2124)를 식별하는데, 상기 데이터 구조(2124)는 변환 테이블의 구성요소 테이블(2106)을 명시하는 가상 테이블 번호(2127)와 변환 테이블(209)과 함께 사용될 검색 알고리즘의 종류를 명시하는 알고리즘 명시자(specifier)(2129)를 포함한다. 가상 테이블 번호는 TLE(301)가 구성요소 테이블에 대한 테이블 포인터(210)를 분석하는 번호를 통해 구성요소 테이블(2106)을 식별한다. 가상 테이블 번호의 사용은 채널 프로세서 및 패브릭 프로세서에 의해 현재 사용되는 것 보다 테이블 메모리(207)에 더 많은 구성요소 테이블(2106)을 보유하고, 가상 테이블 번호에 의해 표시되는 테이블 포인터(2105)를 변경함으로써 간단하게 다른 구성요소 테이블을 위해서 하나의 구성요소 테이블(2106)을 스와핑(swapping)하는 것을 가능하게 한다. 일예로, 실행 프로세서(313)는 채널 프로세서와 패브릭 프로세서가 주어진 구성요소 테이블을 사용하고 있는 동안에 새로운 구성요소 테이블을 만들 수 있고, 그런 후에 writereg 명령(2415)을 갖는 링 버스 메시지를 보냄으로써 간단하게 주어진 테이블을 새로운 테이블로 대체할 수 있는데, 상기 writereg 명령(2415)은 가상 테이블 번호와 관련한 TLE(301)에 있는 레지스터 내의의 테이블 포인터(2105)를 테이블 포인터(2105)로 변경시킨다.
주어진 변환 테이블(209)은 4개 까지의 구성요소 테이블(2106)로 구성될 수 있다. 구성요소 테이블들 중 하나는 데이터 테이블(2117)이어야 한다; 다른 테이블은 링크 테이블(2107)이다. 도 21에 도시된 변환 테이블(209)은 2 개의 구성요소 테이블, 즉 링크 테이블(2107)과 데이터 테이블(2117)을 갖는다. 구성요소 테이블은 변환 테이블 설명자(2124)에 있는 구성요소들의 가상 테이블 번호로서 식별된다.
하슁(hashing) 알고리즘을 통해 수행되는 변환은 예로써 변환 테이블(209)이 어떻게 키를 데이터로 변환하는데 사용될 수 있는지를 제공 할 수 있다. 하슁 알고리즘은 널리 공지되어 있다. 상기 하슁 알고리즘이 하는 일은 긴 비트 스트링을 짧은 비트 스트링 위에 매핑하는 것이다. 이 경우에, 긴 비트 스트링은 키이고, 짧은 비트 스트링은 테이블 엔트리에 대한 인덱스이다. 하슁 알고리즘은 단지 데이터 테이블 구성요소(2117)만을 포함하는 변환 테이블(209)과 함께 사용될 수 있다. 데이터 테이블(2117)이 설정되었을 때, 데이터 테이블 엔트리(2119)가 키에 대한 데이터를 포함하는데, 상기 키는 하슁되고, 상기 키에 대한 데이터 테이블 엔트리는 가능하다면 하쉬 알고리즘에 의해 생성된 인덱스(i)에서 생성되며, 그렇지 않으면 인덱스(i) 다음의 제일 빠른 이용가능한 인덱스로 생성된다. 인덱스(i)로 하슁하는 키는 다음의 키(i)로 명명될 것이다. 키(i)가 하슁 알고리즘에 제공될 때, 하슁 알고리즘은 데이터 인덱스{2114(i)}를 반환한다. 키에 대응하는 DTE(2119)가 인덱스{2114(i)}인 경우에는 검색이 종료하거나, 또는 하쉬 충돌이 존재하는 경우에는 하나 초과의 키가 동일한 인덱스(i)로 하슁한다. 그러한 경우에, 데이터 테이블(2117)은, 동일한 인덱스(i)로 하슁하는 키를 갖는 DTES가 {2114(i)} 다음의 인덱스를 갖도록 설정될 수 있고, 따라서 검색 알고리즘이 인덱스{2114(i)}로 개시하고, 키(2120)가 키와 일치하는 것을 하나 발견하거나 또는 일치(match)를 발견하지 않고도, 데이터 테이블(2117)의 종단에 도달할 때까지 다음 데이터 테이블 엔트리(2119) 내의 키(2120)와 키를 비교하며, 그 경우에 일치의 결핍을 보고한다. 만약 더 빠른 속도가 요구된다면, 링크 테이블은, 충돌이 발생하는 인덱스(2114)에 대한 LTE와 함께 설정 될 수 있고, 상기 인덱스는 충돌이 발생한 후에 링크 테이블에 인가될 수 있다. 그런 후에 링크 테이블은 DTE 내의 인덱스에 대응하는 엔트리의 인덱스를 제공할 것이다.
테이블 룩업 엔진(301)은 링 버스 메시지에 응답하여 검색 테이블(209) 상의 유지 동작과 검색을 수행한다. 테이블 룩업 엔진(301)은 하슁 알고리즘, 이진 트라이 알고리즘(binary trie algorithms), 및 퍼트리서 트라이 알고리즘(patricia trie algorithms)을 포함하는 다양한 검색 알고리즘을 사용하여 검색을 수행한다. 테이블 유지는 테이블 엔트리의 인덱스 및 검색을 사용하여 수행된다. 일반적으로, 테이블 유지 동작을 명시하는 메시지는 실행 프로세서(313)로부터 도래한다.
링 버스 메시지 : 도 28
TLE(301)와 DCP(203)의 다른 구성요소들 사이의 모든 상호작용은 링 버스(311) 상의 메시지에 의한 것이다; XP(313)는 변환 테이블(209)을 설정 및 유지하기 위해서 링 버스 메시지를 사용하고, 패킷 프로세서는 변환될 아이템을 TLE(301)로 보내기 위해서 링 버스 메시지를 사용하며, 상기 TLE(301)는 변환 결과를 반환하기 위해서 링 버스 메시지를 사용한다. 도 28은 바람직한 실시예에서의 링 버스 메시지를 나타낸다. 메시지(2801)는 2 개의 주요 구성요소, 즉 데이터(2817)와 제어(2803)를 구비한다. 데이터는 64 비트인 임의의 종류의 데이터일 수 있다. 링 버스 메시지가 TLE(301)로 전달될 때, 데이터(2817)는 TLE 명령을 포함한다. TLE(301)는 상기 명령을 실행하고, 그 결과를 TLE 명령 소스에 전달된 링 버스 메시지의 데이터(2817)에 반환한다. 제어(2803)는 다음과 같은 필드들을 갖는다:
ξ M 필드(2805)는 하드웨어에 의해 설정되고, 메시지가 64 비트보다 더 길고 따라서 연속적인 슬롯 내에 있는 메시지 시퀀스에 포함된다는 것을 나타낸다:
ξ TY 필드(2807)는 다음 4 유형의 메시지를 나타낸다;
· 비점유 : 링 버스 슬롯은 어떠한 메시지도 포함하지 않는다;
· 표시 메시지;
· 확인 메시지;
· 요청 메시지;
· 응답 메시지;
ξ LEN 필드(2809)는 데이터(2817) 내에 있는 메시지의 길이를 나타낸다;
ξ SEQ 필드(2811)는 응답 메시지의 순서가 결정될 수 있도록 하기 위해서 송신측(sender)에 의해 설정될 수 있는 시퀀스 번호이다;
ξ DEST 필드(2813)는 메시지의 목적지인 링 버스(311) 상의 장치 나타낸다;
ξ SRC 필드(2815)는 소스인 장치를 나타낸다.
표시 및 확인 메시지 유형은 링 버스에 연결된 장치의 링 버스 인터페이스가 작동하는지를 결정하기 위해서 간단하게 사용된다; 만약 장치가 다른 장치로부터의 표시 메시지를 수신한다면, 상기 장치는 상기 다른 장치로 확인 메시지를 반환한다. 링 버스 상의 장치는, 그것이 다른 장치가 송신 장치의 동작을 수행하기를 원할 때, 다른 장치에 대한 요청 메시지를 보낸다; 다른 장치가 동작을 수행할 때, 그것은 송신 장치로 결과를 역으로 보내기 위해 결과 메시지를 사용한다.
따라서, 테이블 룩업을 통해, 테이블 룩업을 수행하기 원하는 채널 프로세서는 채널 프로세서가 소스로서 그 자체를 명시하고 목적지로서 TLE(301)을 명시하는 요청 유형의 요청 메시지를 보낸다. 데이터(2817)는 동작을 위한 TLE 명령을 포함하고, SEQ(2811)는 채널 프로세서가 응답 메시지를 식별하도록 하는 값으로 설정될 수 있다. TLE(301)는 메시지의 TLE 명령을 실행하고 상기 실행 결과를 채널 프로세서에 응답 메시지로 보냄으로써 요청 메시지에 응답한다. 그 결과는 데이터(2817)에 존재하고, TLE는 소스로서 그 자체를 명시하고, 목적지로서 채널 프로세서를 명시하며, SEQ(2811)는 요청 메시지 내에서 그것이 갖고 있던 값을 구비한다.
도 24는 테이블 룩업 엔진(301)이 링 버스(311)를 통해 명령을 수신할 때 반응하는 테이블 룩업 동작에 대한 명령의 리스트이다. 각각의 명령은 테이블에서 행을 갖는다; 제 1 열은 명령의 내용을 명시하고, 제 2 열은 명령의 ID 번호를 명시하고, 제 3 열은 그것이 반환하는 데이터를 명시하며, 제 4 열은 명령의 효과를 명시한다. 테이블 룩업은 룩업 테이블 FindR 명령(2409)을 사용하여 수행된다; 나머지 명령은 변환 테이블(209)을 설정 및 유지하고, 테이블 룩업 엔진(301)을 개시하며, TLE이 어디에서 기능하는지를 테스트하기 위해서 사용된다.
명령은 테이블 내에 엔트리를 어떻게 위치지정하는 지와 위치된 엔트리를 통해 어떻게 동작을 수행하는 지에 따라 더욱 세분화될 수 있다. 키 명령(2423)은 엔트리를 위치지정하기 위해서 키를 사용한다:
ξ Find 명령(2405)은 키와 알고리즘 번호를 독립변수(argument)로서 취하고, 키에 대한 데이터 테이블 엔트리(2119)를 검색하기 위해서 알고리즘 번호에 의해 명시되는 검색 알고리즘과 변환 테이블(209)을 사용하고, 데이터 엔트리(2119)의 내용을 반환하거나 또는 어떠한 키에 대한 엔트리도 발견되지 않는 경우에는 에러를 반환한다.
ξ FindW 명령(2407)은 독립변수로서 키, 알고리즘 번호, 기록될 데이터, 및 오프셋 및 길이 명시자를 취득한다; 상기 명령은 키에 대한 데이터 엔트리(2119)를 찾기 위해서 키와 알고리즘을 사용하고, 오프셋에 의해 명시된 엔트리 내의 한 위치에서 시작하는 엔트리에 길이로 명시된 데이터 길이를 기록한다;
ξ FindR 명령(2409)은 FindW와 동일한 독립변수를 취득하지만, 키에 대한 엔트리(2119)로부터 오프셋에서 시작하는 데이터 길이를 판독하고, 그것을 반환한다.
인덱스 명령(2421 및 2425)은 명령 테이블(2106)에 엔트리를 위치지정하기 위해서 가상 테이블 번호 및 인덱스를 사용한다. 그룹(2421)에 속한 명령들은 명령어에 명시된 엔트리로부터 데이터를 판독하고 또한 상기 엔트리에 데이터를 기록한다; 그룹(2425)에 속한 명령은 명령에 명시된 엔트리 내의 데이터를 변경한다:
ξ Write 명령(2401)은 구성요소 테이블(2106)을 명시하는 가상 테이블 번호와, 구성요소 테이블에 있는 엔트리를 명시하는 인덱스, 기록될 데이터, 기록될 데이터 부분을 명시하는 마스크, 기록이 시작되는 오프셋, 및 기록될 데이터의 길이를 독립변수로써 갖는다; 상기 명령은 명령에 명시된 바와 같은 데이터를 기록한다.
ξ Read 명령(2403)은 마스크를 제외하고 동일한 독립변수를 갖는다; 상기 명령은 명시된 테이블의 명시된 엔트리 내의 명시된 위치에서 데이터를 판독하고, 상기 데이터를 반환한다;
ξ XOR 명령(2411)은 명시된 테이블의 명시된 엔트리 내의 명시된 위치에 있는 데이터 상의 명령에 있는 데이터를 사용하여 XOR 연산이나 CRC 계산을 수행한다; CRC 계산의 경우, 명령은 CRC를 반환한다.
ξ Add 명령(2423)은 명시된 테이블의 명시된 엔트리 내의 명시된 위치에 있는 데이터에 명령 내의 데이터를 추가한다.
레지스터 명령(2427)은 TLE(301)의 레지스터를 판독(2417)하고, 이 레지스터에 기록(2415)한다; 레지스터는 레지스터 어드레스에 의해 명시된다. 이러한 명령은 변환 테이블, 구성요소 테이블(2106), 및 검색 알고리즘에 대한 코드를 위치지정하고, TLE(301)에 내용 정보를 간단하게 기록하고 또한 그로부터 내용 정보를 판독하는데 필요한 정보를 통해 TLE(301)를 개시하기 위해 사용된다.
Echo 명령(2419)은 명령에 있는 데이터를 송신측에 간단하게 반환한다; 그것은 첨부된 장치의 링 버스(311)와 링 버스 인터페이스가 적절하게 동작하는지를 검사하기 위해 사용된다. Nop 명령(2420)은 실행할 때 아무 것도 수행하지 않는 명령이다.
TLE(301)는 다음과 같은 기본 루프를 실행한다:
1. 링 버스로부터 명령을 판독;
2. 명령을 실행; 및
3. 링 버스를 통해 결과를 반환.
여기서 명령은 테이블 상의 동작이고, 명령을 실행하는 단계는 다음의 단계들을 포함한다:
a) 테이블 엔트리의 인덱스를 결정하는 단계, 및
b) 테이블 엔트린 내의 명시된 위치에서 데이터에 대한 표시된 동작을 수행하는 단계.
키를 포함하는 명령을 통해, 테이블 엔트리의 인덱스를 결정하는 단계는 다음의 단계를 포함한다:
ⅰ. 키를 제 1 인덱스 값으로 변환하는 단계와;
ⅱ. 인덱스 값으로 명시된 변환 테이블 엔트리에 저장되어 있는 키를 패치하는 단계와;
ⅲ. 만약 키와 패치된 키가 일치한다면, 단계(ⅴ)로 가는 단계와;
ⅳ. 만약 그것들이 일치하지 않는다면, 검색 알고리즘에 따라 새로운 인덱스를 계산하고; 단계(ⅱ)로 가는 단계; 및
ⅴ. 인덱스 값으로 명시된 테이블 엔트리에 저장되어 있는 데이터에 대한 동작을 수행하는 단계.
도 22는 테이블 룩업 엔진(301)의 내부 구조를 도시한다. 테이블 룩업 엔진(301)으로 어드레싱되는 링 버스 메시지는 링 버스 노드(2201)에 수신된다; 메시지 내의 명령은 명령 프로세서(2203)와 테이블 룩업 엔진(301)의 다른 구성요소에 의해 처리된다. 처리를 수행하는데 필요한 정보는 레지스터 저장매체(2205)에 저장되고, 알고리즘에 대한 프로그램은 제어 저장매체(2215)에 저장된다.
도 23은 레지스터 저장매체(2205)와 제어 저장매체(2215)의 상세도를 나타낸다. 본 논의를 위해서는, 레지스터 저장매체(2205) 내에 있는 4 종류의 레지스터, 즉 알고리즘 구성 레지스터(2301), 테이블 구성 레지스터(2311), 가상 테이블 구성 레지스터(2341), 및 메시지 컨텍스트 레지스터(2319)가 관심의 대상이다. 알고리즘 구성 레지스터(2301)는 명령에서 사용되는 알고리즘 번호를 제어 저장매체(2215) 내의 테이블(209)과 하쉬 코드(2323)에 관련시킨다. 현재 TLE(301)에 의해 사용되고 있는 각 테이블(207)을 위한 알고리즘 구성 레지스터(ACR)(2301)가 존재하고, 상기 ACR{2301(i)}의 인덱스는 그것의 알고리즘 번호(3125)이다. 단일 ACR{2301(i)}는 도 23에 도시되어 있다. 주어진 ACR(2301)은 테이블(207)을 구성하는 구성요소 테이블을 위한 가상 테이블 번호를 포함한다. LVT1(2325)은 제 1 인덱스 테이블에 대한 가상 테이블 번호이다; LVT2(2327)는 제 2 인덱스 테이블에 대한 가상 테이블 번호이다; LVT3(2329)은 제 3 인덱스 테이블에 대한 가상 테이블 번호이다; DVT(2323)는, 결국, 데이터 테이블에 대한 가상 테이블 번호이다. HASHF#(2331)은 가상 테이블을 검색하는데 있어 사용되는 하쉬 기능의 번호이다.
구성요소 테이블 구성 레지스터(2311)는 SRAM(207) 내의 구성요소 테이블(2106)을 나타낸다. 각 구성요소 테이블(2106)에 대한 CTCR{2311(i)}이 제공되고, 테이블의 CTCR(2311)의 인덱스는 테이블의 물리적인 테이블 번호(2343)이다. 각각의 CTCR(2335)은 테이블의 유형(2335), 테이블 엔트리의 크기(2337), 및 SRAM(207) 내의 테이블 개시의 오프셋(2339)을 나타낸다. VTCR(2341)은, 결국, 현재 사용 중에 있는 가상 테이블을 나타낸다. 각각의 가상 테이블 번호(2127)에 대한 VTCR(2341)이 제공되고, 주어진 가상 테이블 번호에 대한 상기 VTCR{2341(i)}은 상기 VTCR{2341(i)}의 VT#(2127)에 의해 현재 명시되고 있는 구성요소 테이블에 대한 물리적인 테이블 번호(2323)를 포함한다. 주어진 VT#(2127)로 표시된 구성요소 테이블을 스위칭하기 위해서, 단지 수행될 필요가 있는 것은 VT#(2127)에 대응하는 VTCR(2341) 내의 PT#(2323)로 변경하는 것이다.
메시지 컨텍스트 레지스터(2319)는 현재 테이블 룩업 엔진(301)에 의해 처리되고 있는 링 버스 메시지에 관련된 데이터를 포함한다. 거기에는 4 개의 그러한 메시지 컨텍스트 레지스터가 제공된다; 따라서, TLE(301)는 4 개의 링 버스 메시지를 동시에 처리할 수 있다; 대기 메시지는 입력 FIFO(2202)나 링 버스(311) 자체에 저장될 수 있다. 단지 하나의 메시지 컨텍스트 레지스터, 즉 메시지 컨텍스트 레지스터{2319(k)}가 도 23에 도시되어 있다. 각각의 메시지 컨텍스트 레지스터(2319)는 그 안에 3 종류의 데이터를 구비한다. 즉 링 버스 메시지로부터의 메시지 정보(2321), 테이블 룩업 엔진(301)에 있는 링 버스 메시지의 처리 동안에 생성되고 사용되는 처리 정보(2327), 및 현재의 처리 결과를 포함하는 결과(2329)를 구비한다. 처리가 종료되었을 때, 결과는 처리될 메시지 소스에 링 버스 메시지 형태로 반환될 것이다. 메시지 정보(2321)는 명령의 종류, 상기 명령과 함께 보내진 정보, 링 버스 메시지 소스인 프로세서, 및 상기 메시지의 시퀀스 번호를 포함한다. 처리 정보(2327)는 알고리즘 코드(2323) 내의 프로그램 카운터, 검색을 통해 검색될 마지막 링크 테이블 엔트리(2111)의 내용, 패치될 다음 링크 테이블 엔트리(2111)의 SRAM(207)에 있는 어드레스를 포함한다. 결과(2329)는 명령의 실행으로부터 발생하는 정보를 포함한다. FindR 명령의 경우에, 결과는, 명령이 명시하고, 데이터 테이블 엔트리(2119)가 키에 대해서 발견되지 않았을 경우에, 키나 널 값(null value)과 관련된 데이터 테이블 엔트리(2119)로부터 판독될 데이터를 포함할 것이다.
도 22로 돌아가면, 구성요소(2203, 2207, 2213, 2209, 2211, 및 2219)는 제어 저장매체(2215)와 레지스터 저장매체(2205)로 액세스하는 처리 소자를 통해 구현된다. 구성요소(2209)는 테이블 메모리(207) 상의 SRAM 메모리 제어기(2217)를 통해 판독 동작을 수행할 수 있고, 구성요소(2219)는 테이블 메모리(207) 상의 SRAM 메모리 제어기(2217)를 통해 판독 및 기록 동작을 수행할 수 있다. TLE(301)에서 사용될 메시지가 링 버스(311) 상에 나타날 때, 링 버스 노드(2201)는 입력 FIFO(2202)의 테일에 메시지를 배치한다; 명령 프로세서(2203)는 FIFO(2202)의 헤드를 판독한다. 명령 프로세서(2203)는 메시지로부터의 정보를 메시지 컨텍스트 레지스터{2319(i)} 세트에 저장한다. 다음으로 메시지 컨텍스트 레지스터{2319(i)} 세트는 그것들이 메시지의 명령을 실행할 때 다른 구성요소들에 의해 사용된다.
구성요소들의 기능을 다음과 같다:
ξ 개시 인덱스 생성기(initial index generator)(2207)는 컨텍스트 레지스터{2319(k)} 세트에 있는 키로부터 구성요소 테이블 엔트리에 대한 개시 인덱스를 생성한다;
ξ 어드레스 생성 구성요소(2209)는 인덱스로부터 구성요소 테이블 엔트리의 어드레스를 생성하고 구성요소 테이블 엔트리로부터 키를 패치한다;
ξ 비교 및 레지스터 패치 구성요소(2211)는 컨텍스트 레지스터{2319(k)} 세트에 저장된 키를 패치한다;
ξSRAM 데이터 래치(2219)는 패치된 키와 저장된 키를 비교하고, 상기 비교에 기초하여 저장된 키에 대한 데이터 테이블 엔트리(2119)가 발견되었는지 결정한다. 만약 발견되었다면, 상기 SRAM 데이터 래치는 데이터 테이블 엔트리를 패치하고, 데이터 테이블 엔트리의 내용과 함께 링 버스 메시지를 출력 FIFO(2221)에 보낸다; 만약 발견되지 않았다면, 상기 SRAM 데이터 래치는 링크 테이블 엔트리를 패치하고 컨텍스트 레지스터{22319(k)}에 그것을 배치하며, 처리가 인덱스 생성 구성요소(2213)에서 계속된다; 인덱스 생성 구성요소(2213)는 다음 테이블 엔트리{2111(1)}의 인덱스를 생성하기 위해서 저장된 키와 패치된 링크 테이블 엔트리를 사용하고, 컨텍스트 레지스터{2319(k)}에 상기 인덱스를 배치한다; 그런 후에, 어드레스 생성 구성요소(2219)는 다음 테이블 엔트리의 어드레스를 생성하기 위해서 상기 인덱스를 사용한다.
findR 명령(2409)을 일예로서 포함하고 명령 내의 alg#이 하슁(hashing) 알고리즘을 명시한다고 가정하는 링 버스 메시지를 취득하였을 때, 일단 명령 프로세서(2203)가 메시지를 위한 컨텍스트 레지스터{2319(k)} 내에 메시지 정보(2321)를 설정하면, 개시 인덱스 생성 구성요소(2207)는 값(l)을 획득하기 위해서 명령으로부터의 키를 통해 하슁 알고리즘을 실행한다. 어드레스 생성 구성요소(2209)는 데이터 테이블 엔트리{2119(1)}의 어드레스를 계산하기 위해서 l을 사용하고, SRAM 데이터 래치(2219)는 엔트리{2119(1)}을 패치한다. 만약 그것의 키 필드(2120)가 키를 포함한다면, 검색이 수행되고 SRAM 데이터 래치(2219)는 데이터 필드(2121)에 데이터를 포함하는 링 버스 응답 메시지를 구성한다. 그렇지 않다면, 인덱스 생성 구성요소(2213)는 DIX(2114)를 증가시키고, 어드레스 생성 구성요소(2209)는 다음 DTE(2119)의 어드레스를 생성하고, 엔트리가 패치되며, 상술된 바와 같은 테스트가 수행된다. 키 필드(2120)가 키와 일치하는 DTE(2119)가 발견되거나 데이터 테이블의 종단에 이르기까지 이러한 형태로 실행이 계속된다.
테이블 룩업 엔진(301)의 다른 사용
XOR(2411) 및 덧셈(2413) 명령의 존재로부터 명확해지는 바와 같이, TLE(301)는 테이블을 더욱 많이 유지하고 그것들 안에 정보를 룩업한다. 각각의 패킷 프로세서는 고정된 최대 회전 지연시간에 따라 TLE(301)에 빠르게 액세스하기 때문에, TLE(301) 및 변환 테이블 메모리(207)는 일반적으로 패킷 프로세서에 의해 처리될 인입 패킷 스트림에 관련된 컨텍스트 정보를 저장하고 처리하고, 그에 따라 패킷 프로세서에서 이용가능한 비교적 적은 수의 DMEM(405)에 의해 제기되는 제한을 극복하기 위해 사용될 수 있다. 어드레스 변환에 필요한 정보는 일예로 그러한 컨텍스트 정보이다. 또다른 예는 다른 패킷의 페이로드로서 전달되는 패킷의 정확성을 검사하는데 필요한 정보이다.
패킷에 있어 정확성 검사는 상기 패킷 종단에서의 사이클릭 중복 코드(CRC)에 의해 이루어진다. 상기 CRC는 패킷이 생성될 때, 및 패킷이 그것의 목적지에 도달하였을 때, 패킷의 내용으로부터 계산되고, CRC는 다시 계산되고 패킷에 포함된 CRC와 비교된다. 만약 상기 CRC들이 동일하다면, 패킷이 오염되지 않고 도착하는 확률은 매우 높다; 만약 상기 CRC들이 다르다면, 패킷이 오염되었을 확률은 동일하게 매우 높다. 후자의 경우에, 패킷은 버려지고, 패킷이 다시 송신되도록 요청하는 메시지가 송신측에 보내진다. SDP(420)는 패킷에 대한 CRC를 계산할 수 있어야 하고, 인입 패킷 내의 CRC를 검사하는 것과 발신 패킷에 대한 CRC를 제공하는 것이 모두 가능하여야 한다. 패킷이 수신되거나 출력될 때, 플라이 상태로(on the play)로 CRC를 계산하는 많은 알고리즘이 공지되어 있다.
앞서 설명된 것으로부터 명확해지는 바와 같이, SDP(420)에서 CRC를 계산하는 것은 패킷에 관한 CRC 정보가 패킷이 SDP(420)를 통과하는 전체 시간 동안 유지되어야 하는 것을 필요로 한다. CRC가 계산되는 패킷은 전송 패킷에 페이로드되는 상위-레벨의 패킷이고, 다른 상위-레벨 패킷에 속하는 페이로드를 전달하는 전송 패킷이 SDP(420)에 수신되고 및/또는 그로부터 송신되는 패킷 스트림에 인터리빙되는 상황에서 문제는 더욱 복잡해진다. 그러한 경우에, 별도의 CRC 계산이 상위-레벨 패킷 각각에 대해 수행되어야 한다.
DCP IC(203)에 있어서, CRC를 계산하는 문제는 중간 결과를 처리하고 저장하기 위해서 TLE를 사용함으로써 해결된다. CRC가 계산되는 상위-레벨 패킷의 각 부분이 SDP를 통과할 때, CPRC(401)는 상위 레벨 패킷의 일부에 대한 중간 CRC를 계산하기 위해서 필요한 정보를 수집하고, 정보가 상위-레벨 패킷에 대한 이전의 중간 CRC에 어떻게 인가되는지를 명시하는 정보 및 명령을 갖는 TLE(301)에 링 버스 메시지를 보낸다. 상위-레벨 부분의 마지막 부분이 통과할 때, 정보를 갖는 마지막 링 버스 메시지가 보내지고, TLE(301)는 CRC 계산을 완료하기 위해서 명령을 실행한다. 다음으로 CPRC(401)는 결과를 판독하는 판독 명령(2403)을 보내고, 패킷이 오염되었는지 여부를 결정하기 위해서, TLE(301)가 보내는 링 버스 메시지 형태의 반환된 결과와 패킷의 종단에 있는 결과를 비교한다.
TLE(301)가 패킷 스트림 컨텍스트를 저장하기 위해서 사용될 수 있는 다른 범위(area)는 트래픽 통계(traffic statistics)이다. 이러한 통계는 패킷 프로세서로부터의 링 버스 메시지에 응답하여 TLE(301)에 축적될 수 있고, 그런 후에 실행 프로세서(313)에 의해 판독될 수 있고, 또한 DCP(203)가 속한 네트워크를 통해 현재의 트래픽 상태에 필요한 바와 같이, DCP(203)를 구성하기 위해서 실행 프로세서(313)나 호스트 프로세서(227)에 의해 사용될 수 있다.
큐 관리 엔진(305)의 상세한 설명
큐 관리 엔진(305)은 패킷 프로세서에 의해 명시된 바와 같이 큐(215) 내의 설명자(217)를 인큐시키고, 또한 패킷 프로세서에 의해 명시된 바와 같이 큐로부터 설명자를 디큐시킨다. 패킷 프로세서가 단독으로 동작하고 있을 때, 상기 패킷 프로세서는 전형적으로 하나 초과의 큐 내에 있는 설명자는 인큐시키지만, 그것들을 단지 단일 큐로부터 디큐시킨다. 패킷 프로세서가 군집화될 때, 군집화된 모든 패킷 프로세서는 일반적으로 단일 큐로부터 판독된다. QME(305)는 각각의 인큐 및 디큐 동작에 관련되고 패킷 프로세서로의 큐에 관한 상태 정보를 또한 제공한다. QME(305)는 그것이 인큐하는 설명자를 판독하지 않고 주어진 패킷 프로세서가 그 다음 큐로부터 디큐할 것인지를 결정하지 않는다. 큐는 DCP(203) 내에 완전하게 저장될 수 있고, 상기 DCP 및/또는 외부 큐 메모리(213)에 저장될 수 있고, 또는 외부의 큐 및 스케줄 유닛에 저장될 수 있고 그에 의해 관리될 수 있다. 후자의 경우에, QME(305)는 인큐 및 디큐 명령을 패킷 프로세서로부터 외부의 큐 및 스케줄 유닛으로 전달하고, 명령의 결과 및 상태 정보를 패킷 프로세서에 역으로 전달하기 위해 명령 인터페이스를 사용한다. 큐가 이러한 경우에 배열되는 방식은 물론 외부의 큐 및 스케줄 유닛까지 완전하게 된다.
설명자의 내용은 인큐를 위해 QME(305)에 설명자를 제공하는 패킷 프로세서에 의해 완전하게 결정되고, 설명자의 내용이 해석되는 방식은 설명자를 디큐시키는 패킷 프로세서에 의해 완전하게 결정된다는 것이 본 명세서에서 언급되어야 한다. 따라서 QME(305)는 DCP(203)가 하나의 구성요소인 스위칭 시스템에 속한 패킷 프로세서간의 순서화된 메시지 전달과 패킷 프로세서와 외부의 큐 및 스케줄 유닛 사이의 정보 전달을 위한 일반적인 시스템이다.
패킷 프로세서를 위한 QME 인터페이스 : 도 29
도 29는 채널 프로세서{307(i)}를 위한 QME 인터페이스(2901)를 나타내지만, 다른 패킷 프로세서는, 패브릭 프로세서(303)가 QME(305)로의 고유 전용 연결을 갖는 것을 제외하고는, 동일한 인터페이스를 갖는다. QME(305)의 인터페이스의 부분들로 시작하여, 상기 QME(305)의 로컬 메모리는 물론 글로벌 어드레스 공간(321)의 일부이고, 따라서 CP{307(i)}에 의해 액세스가 가능하다. QME(305) 내의 로컬 메모리에는 큐 상태 정보(2902)가 포함된다. 이후에 더 상세하게 설명되어지는 바와 같이, 큐 상태 정보(2902)는 채널 프로세서{307(i)}로 하여금 QME(305)에서 어느 것을 큐 시킬 지를 결정하도록 하고, 설명자뿐만 아니라 그로부터의 그러한 큐의 상태를 디큐시킬 수 있다. 따라서 채널 프로세서{307(i)} 내의 CPRC(401)는 어떤 것을 큐시킬 지를 결정하기 위해 QSI(2901)를 액세스하고, 다음으로 그로부터 설명자를 디큐시켜야 한다. 각각의 패킷 프로세서를 위해 QME(305)에는 큐 메일박스(2903)가 존재한다. 큐로부터의 설명자를 인큐 또는 디큐시키기 위해서, CP{307(i)}는 페이로드 버스(317)를 통해 큐 명령(2913)을 CP{307(i)}의 QMB(203)에 보낸다. 디큐 명령에 응답하여, QME(305)는 페이로드 버스(317)를 통해 디큐 메시지(2907)를 CP{307(i)}에 반환한다. 디큐 메시지(2907)는 설명자에 의해 표시된 프로토콜 데이터 유닛에 대한 디큐된 정보와 디큐된 설명자를 포함하고, 설명자는 큐의 조건으로부터 디큐된다. QME(305)는 패킷 프로세서에 의해 제공되는 큐에 관한 개별적인 패킷 프로세서에 큐 상태보고(BQSR)(2915)를 송신하기 위해서 글로벌 버스(319) 내의 스페어 사이클을 또한 사용한다. 이러한 보고는 패킷 프로세서에 의해 제공되는 큐 중 어느 것이 비게 되고, 어떤 것이 비게 되는 것이 중지되는지(which have ceased being empty)를 나타낸다. 상기큐 상태보고는 패킷 프로세서의 로컬 어드레스 공간 내에 있는 큐 상태 레지스터(601)에 수신된 큐 상태보고(RQSR)(2915)로서 나타난다. 최종적으로 CP{307(i)}에는 큐 동작 상태 레지스터가 존재하는데, 상기 큐 동작 상태 레지스터는 QME(305)가 상기 CP{307(i)}로부터 수신하는 마지막 큐 명령의 실행 상태를 나타내는 2 비트를 포함한다. 4 가지의 가능한 상태는 다음과 같다:
ξ 성공적으로 이루어졌거나 및/또는 휴지 상태
ξ 성공적으로 이루어지지 않은 상태
ξ 실행 중인 상태, 명령의 실행을 시작하기 위해 기다리는 상태
ξ 실행 중인 상태, 명령이 QME에 의해 실행되는 상태
CP{307(i)}가 패킷을 수신하고 송신한다는 것을 가정하면, 전형적으로 다음과 같이 인터페이스를 사용할 것이다: 수신된 패킷에 대한 설명자를 만들거나 인큐하기 위해 필요한 정보를 획득하고, CP{307(i)}는 인큐 명령을 CP{307(i)}의 QMB{2903(i)}에 보내기 위해서 기록 제어 블록(610)을 설정하고, 메일박스가 사용 중이지 않은 것을 확인하기 위해 QOS(2911)를 검사하며, 인큐 명령을 보내는 DMA를 시작한다. 따라서 설명자를 인큐시키는 동안, 상기 CP는 그것이 패킷을 송신하는 임의의 큐가 비지 않게 되는 지를 결정하기 위해서 주기적으로 RQSR(2915)을 검사한다. 만약 그 것들중 하나가 패킷을 갖는다면, CP{307(i)}는 단지 인큐 명령에 대해 기술된 방식으로 디큐 명령을 보낸다. QME(305)는 DEQM(2907)을 통해 디큐 명령에 응답하고, CP{307(i)}는 설명자가 표시하는 패킷을 송신하기 위해서 DEQM(2907)에 포함된 설명자를 사용할 수 있다. 상기 CP{307(i)}는 설명자에 의해 표시되는 패킷의 송신을 스케줄링하고, 또는 큐의 상태에 대한 복사를 업데이트시키기 위해서 DEQM(2907)에 포함된 다른 정보를 사용할 수 있다. 상기 CP{307(i)}는 글로벌 어드레스 공간(321)의 QME(305) 부분을 액세스하지 않고도 막 설명되어진 모든 것들을 수행할 수 있고, 따라서 글로벌 버스(319)에 부담을 준다는 것이 본 명세서에 서 주지되어야 한다. 물론, 상기 CP{307(i)}는 그 것이 기록하거나 판독하는 큐의 상태에 대해 더 많은 정보를 필요로 하여야 하고, QSI(2902)를 액세스할 수 있다.
큐 명령(2913)의 상세한 설명 : 도 30
바람직한 실시예에서, 패킷 프로세서는 QME(305)에 다음과 같은 4 개의 동작을 수행하도록 명령할 수 있다.
ξ큐 구성;
ξ 큐 상에 설명자를 인큐시킴;
ξ큐로부터 설명자를 디큐시킴;
ξ 다수의 큐 상에 설명자를 인큐시킴.
이러한 동작을 위한 명령은 페이로드 버스(317)를 통해 QME(305)에 송신된다; 페이로드 버스(317)를 통한 트랜잭션(transaction)은 두 부분, 즉 어드레스와 데이터를 갖는다. 단일 큐를 포함하는 큐 명령을 통해, 어드레스는 3001로 도시된 바와 같이 동작 및 큐를 명시하기 위해서 사용된다. 카운트 필드{CNT(3003)}, 트랜잭션 번호{T#(3005)}, 및 풀 식별자{PI(3007)}는 모든 페이로드 버스 어드레스에 대해 공통적이다; CNT(3003)는 트랜잭션에 있어 판독되거나 기록되는 16-비트 분량(quantities)의 수를 명시한다; T#(3005)은 주어진 목적지에 대한 동일한 소스에 의한 트랜잭션을 구분한다; PI(3007)는 목적지, 즉 BME(315) 내의 버퍼 풀이나 BME(315)에 의해 수행되는 버퍼 태그 동작 및 QME(305)에 의해 수행되는 큐 동작에 대한 예약된 풀 번호를 명시한다. 어드레스에서 PI(3007)는 QME(305)를 명시하고, 또한 어드레스는 위의 동작들 중 하나를 명시하는 동작 명시자(3009)를 포함하고, 단일 큐를 포함하는 동작에 대한 큐 번호(3011)를 포함한다.
명령의 데이터 부분에 대한 내용은 명령에 따라 변한다. 구성 큐 명령에 대해서, 데이터(3013)는 어드레스의 3011에 명시되는 큐가 3015에 포함할 수 있는 최대의 설명자(217)의 수, 설명자가 3017에서 취득하게 되는 QME(305) 내의 설명자 풀, 및 설명자 허용도(allowance)(3019)를 명시하고, 상기 설명자 허용도(3019)는 큐에 넘겨질 수 있지만 실제적으로는 상기 큐에서 사용되지 않는 설명자(217)의 수를 명시한다. 구성 큐 명령은 주어진 큐를 판독하는 패킷 프로세서가 상황 변화에 따라 큐에 할당된 자원의 양을 다이내믹하게 변경하도록 한다. 일예로, 만약 큐로부터 송신되고 채널 프로세서(307)에 의해 제공되는 출력포트에 대한 트래픽 버스트가 존재한다면, 채널 프로세서(307)는 설명자의 최대 수 및/또는 큐에 대한 설명자 허용도를 증가시키기 위해서 구성 큐 명령을 사용할 수 있고, 버스트가 지나갈 때, 채널 프로세서(307)는 설명자의 최대 수 및/또는 설명자 허용도를 감소시킬 수 있다.
유니케스트(unicast) 인큐 명령에 대해서, 두 개의 데이터 워드(data word)(3021)가 존재한다. 제 1 데이터 워드는 인큐되는 설명자에 의해 표시되는 DRAM(229) 내의 데이터 양을 명시하는 설명자 가중치(3023)를 포함한다. 제 2 데이터 워드는 3011에 명시된 큐에서 인큐될 설명자(217)를 포함한다. 디큐 명령에 대해서, 두 개의 데이터 워드(3025)가 존재한다. 제 1 워드는 디큐될 설명자에 대한 설명자 가중치(3023), 큐 내에 상주하는 설명자들에 대한 총 큐 가중치(3027)인 큐 가중치(3027), 및 큐 내에 상주하는 설명자이 수인 큐 길이(3029)를 포함한다. 제 2 워드는 3011에서 명시된 큐로부터 디큐되는 설명자(217)를 포함한다. 디큐된 설명자를 수신하는 패킷 프로세서는, 그것이 송신하는 큐 중에 어느 큐에 대해서 다음에 디큐 명령을 등록할 것인지를 결정하거나 또는 큐에 이용가능한 자원의 양을 변경하기 위해 구성 큐 명령을 등록하기 위해서 제 1 워드에 있는 정보를 사용할 수 있다.
어드레스 부분은 3031에 도시되어 있고 데이터 부분은 3035에 도시되어 있는 멀티케스트 인큐 명령은 하나 초과의 패킷 프로세서에 의한 송신을 위해 설명자를 인큐시킨다. 단지 어드레스 부분(3031)과 어드레스 부분(3001) 사이의 차이점은, 상기 어드레스 부분(3031)이 큐 번호 필드(3011) 대신에 큐 레벨(QLEV) 필드(3033)를 포함한다는 것이다. 큐 레벨 필드(3033)는 설명자를 수신하게 되는 큐에 대한 최소의 서비스나 우선순위 레벨을 명시한다. 명령의 데이터 부분(3035)은 어느 패킷 프로세서가 큐를 출력할 것인지를 나타내는 제 1 워드 내에 멀티케스트 벡터(MCV)(3037)를 포함한다. 또한 제 1 워드에는 설명자(217)에 대한 설명자 가중치(3023)가 포함되는데, 상기 설명자(217)는 제 2 워드 내에 존재한다. 명령 내의 데이터가 나타내는 바와 같이, 멀티케스트 인큐 명령은 특정 큐 대신에 패킷 프로세서와 서비스 레벨을 명시하고, QME(305)는 적어도 최소의 서비스 레벨을 갖는 명시된 패킷 프로세서에 의해 제공되는 큐 내의 설명자(207)를 인큐시킨다. 설명자는 이후에 상세하게 설명되어지는 바와 같이 실제적으로 모든 큐 상에 복사되지 않는다. 멀티케스트 인큐 명령을 QME(305)에 보내는 수신 패킷 프로세서는 또한 멀티케스트 인큐 명령의 설명자에 명시된 BT(233)에 대해 카운터를 설정하는 BME(315)로 명령을 보낸다; 매번 송신 패킷 프로세서는 멀티케스트(설명자에 표시된)를 위해 인큐되는 설명자를 수신하고, 설명자의 BT(233)에 의해 명시된 PDU를 송신하고, 상기 수신 패킷 프로세서는 BT(233)에 대한 카운터를 "1"씩 감소시키는 명령을 BME(315)에 보낸다.
큐 데이터 구조의 상세한 설명 : 도 31 및 도 32
도 31 및 도 32는 바람직한 실시예에 있어서 버퍼 관리 엔진(305)에서 큐(215)를 구현하는 데이터 구조를 상세하게 도시한다. DCP(203)이 사용되는 특정 상황에 필요한 큐의 수와 크기에 따라, 데이터 구조는 모두 DCP(203) 내부의 메모리에 상주할 수 있고, 큐 제어 데이터 구조는 DCP(203) 내의 메모리에 상주할 수 있으며, 큐 자체는 큐 메모리(213)에 상주할 수 있고, 또는 모든 큐 데이터 구조는 큐 메모리(213)에 상주할 수 있다.
큐(215)는 설명자 레코드(3111)의 연결된 리스트이다. 모든 설명자 레코드(3111)는 동일한 크기를 갖지만, 그 크기는 시스템 개시에 대한 파라미터로 설정될 수 있다. 설명자 레코드는 다수의 설명자 풀{3109(O..q)}에 저장되고, 상기 설명자 풀은 QME(305)에 대해 유효한 저장의 양을 통해 결정되는 풀의 크기와 수를 갖는다. 주어진 큐에 속하는 설명자 레코드(3111)는 모두 단일 설명자 풀{3109(i)}로부터 유도되어야 한다. 각각의 설명자 레코드(3111)는 적어도 다음과 같은 필드를 포함한다.
ξ설명자가 현재 인큐되고 있는 큐의 수를 나타내는 작동 중인 카운트{IUC(3139)};
ξ큐에서 다음 버퍼 레코드를 포인팅하는 다음 포인터{NPTR(3115)}.
여기서 설명자는 수신 패킷 프로세서로부터의 버퍼(231)에 대한 정보를 송신 패킷 프로세서에 전달하기 위해 사용되고, 설명자 레코드(3111)는 또한 다음과 같은 것을 포함한다:
ξ 설명자의 버퍼 태그(233)에 의해 표시되는 버퍼의 크기를 나타내는 설명자 가중치{DW(3137)}; 및
ξ 설명자에 의해 표시되는 SDRAM(229) 내의 버퍼에 대한 버퍼 태그{BT(233)}.
만약 그렇지 않으면, 설명자(217)의 내용과 설명자 레코드(3111)의 내용은 설명자 소스인 패킷 프로세서에 의해 결정된다. 일예로, 만약 소스 패킷 프로세서가, 패킷의 최종 목적지가 다수의 이더넷 노드인 스트림 내의 패킷을 처리하고, 목적지 패킷 프로세서가 이더넷 노드가 속한 LAN으로 패킷을 출력하는 송신 패킷 프로세서라면, 설명자(217)는 버퍼 태그(233)에 의해 명시된 버퍼 내용으로부터 구성되어질 패킷에 대한 이더넷 어드레스를 포함할 것이다. 또한 도 31에서는 멀티케스트 리스트 레코드{MCLR(3123)}의 풀(3121)을 도시하고 있다. 이후에 설명되어지는 바와 같이, 이러한 레코드는 멀티케스팅에 사용된다.
각각의 큐(215)는 큐 리스트(3101)내에서 큐 레코드(3103)에 의해 표현된다. 큐 리스트(3101)는 글로벌 어드레스 공간(321)의 버퍼 관리 엔진(305) 부분에 있으며, 결국 패킷 프로세서에 의해 판독될 수 있다. 큐의 큐 번호(3105)는 리스트(3101) 내에서 자신의 큐 레코드(3103)의 인덱스이다. 큐 리스트(3101)는 섹션(3107)으로, 패킷을 송신하는 각각의 패킷 프로세서당 하나씩, 분리된다. 주어진 하나의 패킷 프로세서를 위한 모든 큐는 리스트(3101)의 해당 패킷 프로세서의 섹션(3107)내의 큐 레코드들의 연속적인 세트에 의해 표현된다. 글로벌 어드레스 공간(321)의 QME(305) 부분내의 구성 정보는, 큐 리스트(3101)의 각 패킷 프로세서 섹션의 베이스 어드레스(3108) 및 해당 패킷 프로세서에 의해 판독되는 큐의 수를 포함하는데; 결국엔, 임의의 패킷 프로세서는 패킷 프로세서들에 의해 서비스되고 있는 큐가 어떤 큐인지를 결정할 수 있고, 또한 하나의 큐 번호가 주어지면 해당 큐 레코드(3103)가 발견될 수 있다. 임의의 주어진 패킷 프로세서가 어떤 큐에 대하여 브로드캐스트 큐 상태 보고(2915)를 수신하는지를 결정하기 위해서 큐 리스트(3101)가 QME(305)에 의해 더 사용된다.
각각의 큐 레코드(3103)는 다음 필드들이 포함된다:
ξ헤드포인터(HDPTR : head pointer)(3113)로서, 이는 현재 해당 레코드 큐의 헤드에 있는 설명자 레코드(3111)를 포인팅한다.
ξ테일포인터(TPTR : tail pointer)(23113)로서, 이는 현재 해당 레코드 큐의 테일에 있는 설명자 레코드(3111)를 포인팅한다.
ξ큐길이(QL : queue length)(3129)로서, 이는 현재 해당 레코드 큐 내의 설명자 레코드(3111) 갯수이다.
ξ총 설명자 가중치(TDW : total descriptor weight)(3131)로서, 이는 해당 레코드 큐 내의 모든 설명자 레코드의 DW 필드(3137)내 값의 합이다.
ξ할당된 설명자 허용도(ADA : allocated descriptor allowance)(3133)로서, 이는 해당 큐에 할당될 수 있는, 큐 내에 실제로 존재하는 것들 보다 많은 설명자의 갯수이다.
ξ큐길이 한계(QLL : queue length limit)(3135)로서, 이는 해당 큐에 대하여 허용가능한 길이의 최대값을 명시한다.
ADA(3133) 및 QLL(3135)이, 큐의 설명자 소스가 될 풀(3809)와 함께, 구성 큐(configure queue) 명령에 의해 세팅된다는 것이 주목될 것이다.
도 31에 단일 큐{215(0)}가 도시되어 있다. 큐{215(0)}는 설명자 레코드 {3111(i ... k)}를 포함하는데, 설명자 레코드{3111(i)}는 큐의 헤드에 있고 따라서 큐레코드(QR){3103(0)}내 HDPTR(3113)에 의하여 포인팅되고 설명자 레코드{3111(k)}는 테일에 있고 따라서 QR{3103(0)}내 TPTR(3117)에 의해 포인팅된다. 설명자 레코드{3111(0)}를 뒤이어 할당된 설명자 레코드{3111(q ... t)}의 링크된 리스트(3119)가 따른다. 이들 설명자 레코드는 큐{215(0)}에 할당되었으나 그것의 일부는 아닌데, 레코드들이 큐{215(0)}의 테일을 뒤따르기 때문이다. ADA 필드(3133)는 링크된 리스트(3119)내에 있을 수 있는 설명자 레코드의 최대 갯수를 결정한다.
큐{215(i)}가 구성 큐 명령에 의해 초기화될 때, QME(305)는 할당된 설명자 레코드(3111)의 링크된 리스트(3119)를 세팅하고 또한 헤드포인터(3113)와 테일포인터(3117)가 링크된 리스트(3119)내 제 1 설명자 레코드(3111)를 포인팅 하도록 큐 레코드{3103(i)}를 세팅하며 QL 필드(3129)는 0으로 세팅된다. QME(305)가 그 동작을 수행하는 경우에, QME는 자신의 상태를 나타내도록 QOS 레지스터(2911)를 세팅한다.
패킷 프로세서의 큐메일박스(2903)로 인큐(enqueue) 명령이 수신되는 때, QME(305)는 그 명령내의 설명자(217)을 취하고, 그것을 그 명령내에 명시된 큐에 속하는 리스트(3119)내의 제 1 설명자 레코드(3111)내에 기록하며, QL(319)을 증가시키고, 또한 해당 설명자 레코드(3111)가 기록되어진 설명자 레코드(3111)를 포인팅 하도록 TPTR(3117)을 업데이트한다. 만약 링크된 리스트(3119)내에 설명자 레코드(3111)가 없다면, QME(305)는 ADA(3133)내에 명시된 수를 그 리스트에 추가한다. 다시, QME(305)는 그 동작 상태를 나타내기 위해 QOS 레지스터(2911)를 사용한다. 만약 설명자(217)가 인큐되기 전에 큐(215)의 큐길이가 0이었다면, QME(305)는 해당 큐가 이제 비어있지 않음을 나타내는 브로드캐스트 통지(2905)를 해당 큐의 패킷 프로세서로 보낸다.
디큐 명령이 수신되는 경우엔, QME(305)는 헤드포인터(3113)을 사용하여, 큐의 헤드에 있는 설명자 레코드(3111)를 위치지정하고, 그것으로부터 설명자(217)를 판독하고, 그 큐내의 다음 설명자 레코드(3111)를 포인팅하도록 헤드포인터(3113)를 업데이트하고, 또한 만약 ADA 필드(3113)에 의해 허용된 것보다 리스트(3119) 내에 더 적은 수의 설명자 레코드(3111)가 존재하는 경우, 리스트(3119)에 이전의 헤드 설명자 레코드(3111)를 추가한다. QOS 레지스터(2911)는 다시 그 동작 상태를 나타낸다. 설명자(217)는 해당 명령의 반환 데이터 내에서 반환된다. 만약 디큐된 설명자가 그 큐내에서 마지막에 있었던 것이었다면, QME(305)는 그 큐가 이제 비어있다는 것을 나타내는 BQSR(2905)을 보낸다.
멀티캐스트 인큐동작 및 디큐동작 : 도 32 및 33
큐 명령에 대한 논의에서 위에서 지적한 바와 같이, 멀티캐스트 인큐 명령은 한 패킷 프로세서로 하여금 둘 이상의 송신 패킷 프로세서에 의한 소비를 위한 설명자를 인큐하도록 허용한다. 도 32는 바람직한 일실시예에서 멀티캐스트 인큐동작이 구현되는 방법을 도시한다. 큐 리스트(3101) 상의 큐들에 덧붙여, 큐 관리 엔진(305)은 단일 멀티캐스트 리스트(3201)를 유지한다. QME(305)는, 멀티캐스트 인큐 명령 내에 수신된 설명자(215)를 멀티캐스트 리스트(3201) 내의 설명자 레코드(3111) 내에 위치시키고, 해당 설명자에 의해 나타내어진 프로토콜 데이터 유닛을 송신하게 될 패킷 프로세서 모두가 전송할 때까지, 설명자는 멀티캐스트 리스트(3201)에 남아있는다.
멀티캐스트 리스트(3201)의 세부사항에 대해서 계속하면, 멀티캐스트 리스트(3201)는 리스트 (3201)내의 제 1 DR(descriptor record){3111(g)}을 포인팅하는 멀티캐스트 리스트 레코드(MLR : multicast list record) (3203)에 의해 표현된다. 패킷 프로세서가 여전히 그것을 위해 설명자(215)의 프로토콜 데이터 유닛을 송신해야만 하는 설명자(215)를 표현하는 리스트(3201)내의 임의의 DR(3111)은 자신과 연관된 하나이상의 멀티캐스트 리스트 레코드(MCLR : multicast list record) (3123)을 가질 것이다. DR(3111)과 연관된 멀티캐스트 리스트 레코드(3123)는 포인터들의 리스트(3209)를 저장하며, 그 포인터들에는 멀티캐스트 리스트(3201)내의 다음 DR(3111)에 대한 포인터 및 유니캐스트 큐내의 DR(311)에 대한 포인터들이 포함된다.
도 32에서, DR{3111(h)}에 대한 포인터들이 상세하게 도시된다. DR{3111(h)}내의 설명자(215)는 멀티캐스트 인큐 명령 - 그 결과는 설명자(215)가 유니캐스트 큐{215(i) 및 215(j)}상에 인큐되었던 명령 - 과 함께 인큐되었다. 따라서, 큐{215(i)}내의 DR{3111(a)}내의 NXTPTR(3115)은 멀티캐스트 리스트(3201) 내의 DR{3111(h)}를 포인팅하고, 큐{215(j)}내의 DR{3111(k)}내의 NXTPTR(3115)도 마찬가지로 포인팅한다. DR{3111(h)}의 NXTPTR(3115)는 MCLR{3123(r)}, 즉 DR{3111(h)}와 연관된 제 1 MCLR을 포인팅한다. MCLR{3123(r)}은 세 개의 포인터를 가지는데, 하나는 포인터(3211)로서 멀티캐스트 리스트(3201)내의 다음 DR(3111)를 포인팅하고; 다른 하나(3212)는 DR{3111(b)} 즉 큐{215(i)}내의 DR{3111(h)}를 뒤이은 DR을 포인팅하며, 세번째 포인터(3213)는 MCLR{3123(s)}을 포인팅하는데, MCLR{3123(s)}은 네번째 포인터(3214)를 가지며, 이 포인터는 DR{3111(l)}, 즉 큐{215(j)}내의 DR{3111(h)}를 뒤이은 DR을 포인팅한다.
MCLR(3123)의 세부사항이 도 33에 도시된다. 각각의 MCLR(3123)은 두개의 큐 포인터(QPTR)(3301)를 가지는데, 그 포인터 각각은 큐 번호(3203)와 다음 MCLR 포인터(NXTMCLR)(3213)에 의해 명시된 큐 내의 다음 DR{3111(h)}에 대한 큐 번호(3203)와 다음 포인터(NPTR)(3205)를 명시하며, 또한 각 MCLR 포인터(3213)는 DR(3111)과 연관된 다음 MCLR을 포인팅한다. 멀티캐스트 리스트(3201)내의 주어진 DR(3111)과 연관된 제 1 MCLR에서, 그 제 1 QPTR(3301)은 멀티캐스트 리스트 내의 다음 DR(3111)을 포인팅한다.
앞선 기술로부터 알 수 있는 바와 같이, 단순히 각각의 큐(215)내의 선행하는 DR(3111)이 DR{3111(h)}을 포인팅하도록 함으로써 또한 DR{3111(h)}과 연관된 MCLR(3123)내의 각 큐내의 뒤이은 DR(3111)에 대한 포인터를 포함하기만 하여 유니캐스트 큐(215)의 임의의 수(number)내의 임의의 DR이 DR{3111(h)}로 될 수 있다. 따라서 멀티캐스트 인큐 동작은, 리스트(3201)로 인큐되는 설명자(217)을 위해 DR(3111)을 추가하고, 그 설명자(217)가 어느 유니캐스트 큐(215)에 인큐되어야할 지를 결정하고, 그 유니캐스트 큐(215)를 위해 필요할 때 MCLR(3123)을 추가하고, 도 32에 도시된 바와 같이 유니캐스트 큐 내의 선행 DR(311) 내에 포인터를 세팅하고, 그 유니캐스트 큐(215)내의 테일포인터가 멀티캐스트 리스트내의 DR(3111)을 포인팅하도록 세팅하고, 또한 사용중 카운트(3139)가 그 설명자(217)가 인큐되었었던 유니캐스트 큐의 총 수를 나타내도록 세팅하는 일에 관한 것이다. 유니캐스트 큐가 멀티캐스트 큐내의 DR(3111)을 뒤이은 DR(3111)을 인큐하였을 때, 큐는 MCLR(3123)내의 자신의 QPTR(3301)내의 NPTR(3205)이 새로 추가된 DR(3111)을 포인팅하도록 세팅한다. QME(305)가 설명자가 인큐되어야 할 유니캐스트 큐를 결정하는 방법은 아래에서 상세하게 설명될 것이다.
멀티캐스트 리스트(3201) 상의 DR(3111)에 대한 디큐 동작은 다음과 같이 이루어진다: 사용중 카운트가 1보다 큰 경우인 한, 멀티캐스트 리스트(3201) 상에 없는 DR(3111)에 대해 기술한 것과 같이 디큐 동작이 이루어지며, 다만 각 디큐 동작이 사용중 카운트를 1만큼 감소시키고 또한 새로운 테일 DR(3111)내의 NPTR(3115)이 그 유니캐스트 큐를 위한 QPTR(3301)내의 NPTR(3205)로부터 세팅된다는 점은 예외이다. DR(3111)내의 사용중 카운트가 1인 때는, 디큐동작은 DR(3111)의 사용 카운트를 0으로, 그리고 자신의 NPTR(3115)가 멀티캐스트 리스트내의 다음 DR(3111)을 포인팅하도록 세팅하며, 또한 자신의 MCLR(3123)을 자유 리스트(free list)로 되돌린다.
멀티캐스트 인큐 동작에서 유니캐스트 큐 선택
멀티캐스트 인큐 명령은 그 안에 설명자가 인큐되어야 할 큐를 명시하는 것이 아니라, 오히려 송신 패킷 프로세서{MCV 필드(3037)} 및 큐 또는 서비스 레벨(QLEV)(3033)을 명시한다는 것이 상기될 것이다. 주어진 큐 또는 서비스 레벨의 의미는, 그 큐를 판독하는 패킷 프로세서가 프로그램되었던 방식에 의해 완전히 결정된다. 멀티캐스트 인큐 명령을 실행하는데 있어서, QME(305)는 이 정보를 유니캐스트 큐 번호로 변환해야만 한다. 이것은 도 33에 도시된 큐 번호 맵핑 테이블(QNMT : queue number mapping table)(3303)에 의하여 행해진다.
송신 패킷 프로세서가 큐 또는 서비스 레벨을 어떻게 사용할 수 있는 가에 대한 쉬운 예를 제공하면, 만약 서비스 레벨이 단순히 큐 사이의 우선순위를 반영 - 더 높은 번호가 더 높은 우선순위인 것으로서 반영 - 한다면, 송신 패킷 프로세서는 더 높은 우선순위를 가진 비어있지 않은 큐가 존재하는 한 주어진 우선순위를 가진 큐를 서비스하지 않을 것이다.
큐 번호 맵핑 테이블(3303)은 각 패킷 프로세서에 대해 하나의 부분(3307)을 가진다. 그 부분들은 패킷 프로세서의 번호에 의해 순서가 매겨진다. 각 부분(3307)은 각각의 서비스 레벨을 위한 엔트리(QNMTE)(3305)를 가진다. 바람직한 일실시예에서는, 8개의 서비스 레벨이 있다. 패킷 프로세서(0)를 위한 예시적인 부분(3307)이 도 33에 도시되는데, 여기서는 패킷 프로세서(0)가 단순 우선순위 시스템 - 더 높은 서비스 레벨이 더 높은 우선순위를 나타내는 시스템 - 을 사용하고 있다는 것 및 패킷 프로세서(0)가 서비스 레벨(0, 3, 및 4)을 위한 큐를 가진다는 것이 가정된다. 패킷 프로세서(0)가 그것을 위한 큐를 가지고 있지 않은 서비스 레벨을 위한 각 엔트리(3305)는 NULL 값을 가지고; 패킷 프로세서(0)가 그것을 위한 큐를 가지는 서비스 레벨을 위한 각 엔트리(3305)는 QROFF와, 큐 리스트(3101)내의 해당 서비스 레벨의 큐를 위한 큐 레코드(3103) 블록 오프셋, 및 그 엔트리의 서비스 레벨을 가지는 패킷 프로세서의 큐의 수를 포함한다.
QNMTE(3305)는 3309에 보여진 바와 같이 패킷 프로세서 번호 및 큐잉 레벨 번호에 의해 어드레싱된다. 따라서, 만약 어드레스(3309)가 패킷 프로세서 번호(0) 및 큐잉 레벨(3)을 명시한다면, 그 어드레스에 의해 위치지정된 엔트리(3305)는 3305(0,3)이다. 엔트리{3305(0,3)}내에 명시된 QROFF를 사용하여, QME(305)는 해당 패킷 프로세서 및 큐잉 레벨을 위한 제 1 큐 레코드(3103)을 발견할 수 있고; QME는 그 큐를 사용할 것을 선택할 수 있거나, 또는 그 큐잉 레벨을 가지는 큐를 위한 큐 레코드(3103)의 다른 것에 의해 명시된 큐를 선택할 수 있다. 만약 어드레스(3309)가 널(null)값 - 패킷 프로세서가 해당 큐잉 레벨을 위한 큐를 전혀 가지지 않음을 나타내는 값 - 을 가진 QNMTE(3305)를 명시한다면, QME(305)는 더 높은 큐잉 레벨을 위한 QNMTE(3305)를 발견하고 방금 기술한 것과 같이 그 레벨에서 큐를 선택할 때까지 부분(3307)을 상승시킨다.
QME(305)를 통한 큐 관리 : 도 34
앞에서 언급한 바와 같이, QME(305)에 의해 관리되는 큐(215)는 DCP IC(203) 내의 QME(305)의 메모리 내부에 완전히 포함될 수 있고, 확장 큐 메모리(213)에 포함될 수도 있으며, 또는 QME(305)로부터의 명령에 반응하여서 외부 큐잉 및 스케줄링 유닛에 의하여 관리될 수 있다. 도 34는 외부 스케줄링 유닛이 있는 구성 및 그 유닛이 없는 구성의 예를 제공한다. 이들 도면에서 설명자(217)의 흐름이 실선의 넓은 연회색(light gray) 화살표로 도시되며; 프로토콜 데이터 유닛의 흐름은 점선의 흑회색(dark gray) 화살표로 도시된다.
3401에서 큐가 QMU(305)에 의해 직접적으로 관리되는 저장매체내에 포함되는 독립형(stand-alone) DCP(203)가 도시되고; 3403에서는 외부 큐잉 및 스케줄링 유닛(3405)이 추가된 독립형 DCP가 도시되는데; 그러한 구성에서는 외부 큐잉 및 스케줄링 유닛은 주어진 패킷 프로세서를 위한 큐의 수, 그들 큐의 레벨, 및 멀티캐스팅과 같은 것들을 다룬다. 외부 큐잉 및 스케줄링 유닛을 가진 QME(305)인 QME(305)는 DCP(203)내에 자신만의 메모리를 가지는데; 그 메모리내에는 외부 유닛(3405)으로 보낼 설명자(217)를 위한 단일 큐 및 해당 송신 패킷 프로세서에 의한 송신을 위해 외부 유닛(3405)에서 QME(305)로 보내지는 설명자(217)를 수신하는 각 송신 패킷 프로세서를 위한 큐들이 있다. 이들 큐의 기능은 패킷 프로세서와 외부 큐잉 및 스케줄링 유닛 사이에 버퍼를 제공하는 것이다.
3407에서, 두개의 DCP(203)(0 및 1)가 스위칭 패브릭(222)에 의해 연결되고 또한 두 DCP(203)를 위한 큐 관리는 DCP{203(1)}내의 QME{305(1)}에 의해 행해지는 구성이 도시된다. 단순히 QME{305(0)}는 패브릭 프로세서{303(0)}에 의해 판독된 큐상에 인큐되어야 하는 설명자(217)를 위한 인큐 명령을 배치하는데, 그 패브릭 프로세서{303(0)}는 패브릭(222)을 통해 패브릭 프로세서{303(1)}로 그 명령을 보낸다. 패브릭 프로세서{303(1)}는 그 명령을 QME{305(1)} 상으로 전달한다. 그 다음에 QME{305(1)}는 그 명령에 나타난 바와 같이 큐(215) 상에 그 설명자를 인큐한다. 큐(215)는 DCP{203(0)} 또는 DCP{203(1)}중 어느 하나의 송신 패킷 프로세서에 의해 판독되는 큐일 수 있다. DCP{203(0)}내의 패킷 프로세서에 의해 판독된 큐에 대한 큐 상태 정보는 패브릭 프로세서{303(1)}, 패브릭(222), 및 패브릭 프로세서{303(0)}를 통해 QME{305(1)}로부터 QME{305(0)}로 전달되고, 그 다음에 QME{305(0)}은 수신측의 QOS 레지스터(2911)를 세팅하거나 또는 사정에 따라 필요한 경우 수신측으로 브로드캐스트 큐 상태 보고(2915)를 보낸다. 디큐 명령에 관해서, 그 명령은 방금 기술된 바와 같이 QME{305(1)}로 전달되고, 또한 그 명령에 응답하여 디큐된 설명자는 상태 정보에 대하여 기술한대로 QME{305(0)}로 되돌아 전달되고 QME{305(0)}로부터 송신 패킷 프로세서로 전달된다. DCP(203)중 하나내의 패킷 프로세서에 의해 수신되었던 프로토콜 데이터 유닛이 DCP(203) 중 다른 하나내의 송신 패킷 프로세서로부터 송신되어야하는 때, 그 송신 패킷 프로세서가 속해있는 DCP내의 BME(315)는 패브릭 프로세서를 통해 수신 패킷 프로세서를 위한 버퍼 관리 엔진으로 버퍼 태그를 포워딩(forwarding)함으로써 그 프로토콜 데이터 유닛에 대한 송신 패킷 프로세서의 요청에 반응하며, 그 수신 패킷 프로세서는 그 프로토콜 데이터 유닛을 패브릭 프로세서를 통해 송신 패킷 프로세서를 위한 버퍼 관리 엔진으로 제공함으로써 그 버퍼 태그에 반응하며, 그 다음에 데이터를 송신 패킷 프로세서로 제공한다.
3409에서는, 큐들이 QME{305(1)}에 의해 관리되는 외부 큐잉 및 스케줄링 유닛(3411)내에 존재하며 것을 제외하고, 3407에서와 같은 배열이 도시된다. QME{305(1)}가 외부 큐잉 및 스케줄링 유닛(3411)에 명령을 전달하고, 이 유닛으로부터 상태 및 설명자를 수신하는 것을 제외하고, 큐 명령, 상태 정보, 및 설명자는 방금 기술된 바와 같이 DCP{203(0)}과 DCP{203(1)}사이에 전달된다. 3413에서는, QME{305(0)} 및 QME{305(1)} 둘 다를 직접적으로 서비스하는 하나의 외부 큐잉 및 스케줄링 유닛(3415)을 가진 배열이 도시된다. 어느 QME(305)라도 다른 QME(305)를 위한 프락시(proxy)로서 또는 자신을 위하여 외부 유닛(3415)을 취급할 수 있다라는 것을 제외하고 동작은 위에서 기술된 바와 같다.
QME(305)의 외부 인터페이스 : 도 35
바람직한 실시예에 있어서, QME(305)는 55-핀 외부 인터페이스 - 외부 동기SRAM 메모리 뱅크이거나 또는 위에서 기술한 바와 같은 큐잉 및 스케줄링 유닛중 하나와 함께 사용될 수 있는 인터페이스 - 를 가진다. 도 35는 외부 인터페이스가 각각의 이들 경우들에서 어떻게 사용되는가를 도시한다. 3501에는 메모리 외부 인터페이스가 도시된다. 32개의 양방향 데이터 라인(3503)과, 20개의 단방향 어드레스 라인(3505), 및 4 또는 5개의 제어 라인(3506)이 있다. 메모리 뱅크(213)에 기록하기 및 그것으로부터의 판독하기는 통상적인 방식으로 행해진다.
3507에서 큐잉 및 스케줄링 유닛(3508)에 대해 55-핀 외부 인터페이스가 어떻게 사용되는가에 대해 도시한다. 다시 32개의 양방향 데이터 라인(3509)과, 16개의 양방향 명령 라인(3511), 및 8개의 제어라인(3513)이 있다. 인터페이스에 관한한, QME(305)가 매스터(master)이고 스케줄러(3508)는 슬레이브(slave)이다. 스케줄러(3508) 또는 QME(305)중 하나는 다른 하나로 메시지를 송신할 수 있으나, 메시지가 송신되어질 방향은 QME(305)에 의해 결정될 것이다. 메시지의 전송은 흐름 제어되는데(flow controlled), 즉 스케줄러(3508) 및 QME(305) 각각은 다른 하나에게 자신이 어떤 메시지를 받아들일 수 있는지 및 받아들일 수 있는지의 여부와 수신측이 그 메시지를 받아들일 수 있지 않는 한 송신측은 보내지 않을 수 있다는 것을 나타낸다. QME(305)는 또한 인터페이스를 위한 클럭 신호 소스이다.
메시지는 4개의 가능한 크기가 있다.
ξ12바이트, 여기서 4바이트는 명령이고 8바이트는 데이터이며, 2 클럭 사이클로 송신되고;
ξ24바이트, 여기서 8바이트는 명령이고 16바이트는 데이터이며, 4 클럭 사이클로 송신되고;
ξ36바이트, 여기서 12바이트는 명령이고 24바이트는 데이터이며, 6 클럭 사이클로 송신되고; 또한
ξ48바이트, 여기서 16바이트는 명령이고 24바이트는 데이터이며, 8 클럭 사이클로 송신된다.
메시지의 크기는 DCP(203)이 초기화되는 때 결정된다. 메시지의 내용은 물론 QME(305) 및 스케줄러(3508) 사이의 상호작용에 의해 결정되지만, 대개 그 내용에는 스케줄러(3508)에 의해 관리되는 큐 상에 인큐되어야 할 설명자(217) 또는 스케줄러(3508)에 의해 관리되는 큐로부터 디큐되었던 설명자(217)가 포함될 것이다.
QME(305)가 송신 패킷 프로세서 모두를 위한 하나의 프락시로서 서비스하며, 또한 이들 패킷 프로세서 각각은 주어진 순간에 스케줄러(3508)로부터 하나의 설명자를 받을 수 있을 수도 있고 받을 수 없을 수도 있다라는 사실에 의해 흐름 제어는 다소간 복잡하게 된다. 바람직한 실시예에서, 패킷 프로세서에 대해 25개까지의 큐가 있을 수 있다: 하나는 실행하는 프로세서(313)을 위한 것이며, 하나는 16개의 채널 프로세서(307) 각각을 위한 것이며, 그리고 8개는 패브릭 프로세서(303)를 위한 것이다. 스위칭 패브릭(222)를 통한 통신 모두에 대해 책임을 지기 때문에, 그리고 위에서 본 바와 같이, 그러한 통신은 프로토콜 데이터 유닛뿐만 아니라 시스템 제어 정보를 수반할 수 있기 때문에, 패브릭 프로세서(303)는 8개의 큐를 가진다. 더욱이, 여러 종류의 프레임을 요구하는 장치들이 단일 패브릭 프로세서에 의해 연결될 수 있다.
외부 스케줄러(3508)과 함께 사용될 때, QME(305)는 단일 수신기 큐(RQ : receiver queue)(3519) - 인큐잉을 위하여 설명자(217)가 스케줄러(3508)로 출력될 수 있을 때까지 QME(305)가 수신 패킷 프로세서로부터 수신하는 모든 설명자(217)를 그 안에 배치하는 단일 수신기 큐 - 및 각각의 송신 패킷 프로세서를 위하여 송신 큐(TQ : transmit queue)(3521)를 가진다. 송신 패킷 프로세서를 위한 TQ(3521)가 가득찰 때, QME(305)는 그 송신 패킷 프로세서의 해당 큐를 위해 더 이상 설명자(217)를 수신할 수 없다.
단지 단일 출력 큐만이 존재하기 때문에, 스케줄러(3506)로 향하는 메시지에 대한 흐름 제어는 단순하다: 스케줄러가 메시지를 받아들일 수 있을 때, 그것은 제어라인(3513)내에 신호를 활성화시키며, 또한 스케줄러 흐름 제어 레지스터(3517)는 그 신호의 상태를 나타내며, 따라서 QME(305)는 제어 레지스터(3517)가 그렇게 나타낼 때까지 다음 메시지를 송신하기 위해서 대기하는 것만이 필요하다. QME(305)를 향하는 메시지에 대한 흐름 제어는 스케줄러(3508)내의 DCP 흐름 제어 레지스터(3515)에 의해 행해지고, DCP 흐름 제어 레지스터(3515)는 25개의 흐름 제어 비트 - 가능한 송신 패킷 프로세서 각각에 대하여 한 비트씩 - 을 포함한다. 스케줄러(3508)는 DCP 흐름 제어 레지스터(3515)내의 송신 패킷 프로세서를 위한 흐름 제어 비트가 그렇게 나타내는 경우에만 그 메시지의 최종 목적지가 주어진 송신 패킷 프로세서인 메시지를 보낼 수 있다. QME(305)에 의해 스케줄러(3508)로 보내진 모든 메시지의 일부가 레지스터(3515)내의 흐름 제어 비트를 세팅하거나 클리어하기 위해 사용될 수 있고, 또한 QME(305)는 송신기의 송신 큐(3521)가 가득찰 때 송신 패킷 프로세서를 위해 그 비트를 세팅하는 메시지를 보내고 또한 송신 큐(3521)가 다시 설명자를 위한 여유공간을 가지는 때 그 비트를 리셋(reset)하는 메시지를 보낸다.
QME(305)의 외부 인터페이스가 일반적으로 큐 관리 장치들과 통신하는데 사용될 지라도, 그럴 필요는 없다. 설명자의 내용이 설명자를 생성하는 패킷 프로세서에 의해 완전히 결정되기 때문에, 외부 인터페이스는 패킷 프로세서에 의해 그 외부 인터페이스를 통하여 액세스가능한 장치에 데이터를 기록하기 위하여 및/또는 그러한 장치로부터 데이터를 판독하기 위하여 사용될 수 있다. 이러한 성능이 사용될 수 있는 한가지 방식은 패킷 프로세서를 "패킷 탐지기(sniffer)", 즉 패킷 스트림 내 패킷에 관한 정보를 단순히 수집하는 장치로서 프로그램하는 것이다. RxSDP(421)은 패킷 스트림으로부터 각 패킷에 대한 원하는 정보를 추출하도록 프로그램될 수 있고 그 정보를 CPRC(401)로 제공할 수 있는데, 그 다음에 CPRC(401)는 그 정보를 모아 설명자로 만들 수 있고 또한 QME(305)에 의한 전달을 위해 그 정보를 저장하고 분석할 수 있는 외부 장치로 그 설명자를 인큐할 수 있다.
스케줄러 외부 인터페이스의 세부사항 : 도 36 및 37
도 36은 어떻게 외부 인터페이스의 개별적인 핀들이 스케줄러(3508)와 사용되는가를 도시한다. 도 8에서, 열로 분류된 핀(3601)은 그룹을 이루는 핀의 수를 보여주며 또한 열로 분류된 방향(3603)내 화살표는 정보 흐름의 방향을 나타낸다. DCP -> SCHED는 QME(305)로부터 스케줄러(3508)로의 흐름을 나타내며 그리고 DCP <- SCHED는 그 반대방향으로의 흐름을 나타낸다. 8개의 제어핀(3513)에서 시작하면,
ξ클럭 핀(3605)은 QME(305)로부터 스케줄러(508)로 클럭 신호를 제공하고;
ξD_flow_ctrl(3607)은 QME(305)로부터 스케줄러(3508)로 각 사이클에 3 비트의 흐름 제어 정보를 제공하는데; 스케줄러(3508)는 D 흐름 제어 레지스터(3515)내의 비트를 셋팅하거나 또는 클리어하기 위한 메시지의 처음 두 사이클 상에 수신된 D_flow_ctrl(3607)의 6 비트를 사용하고;
ξS_flow_ctrl(3609)는 스케줄러(3508)로부터 QME(305)로 1 비트의 흐름 제어 정보인데; QME(305)는 S 흐름 제어 레지스터(3517)을 셋팅하기 위해 핀(3609) 상의 값을 사용하고;
ξXfer_rqst(3611)는 스케줄러(3508)가 QME(305)로 메시지를 보내고자 하는 경우에 활성화시키는 신호이며; 그리고
ξXfer_ctrl(3613)는 QME(305)가, 뒤이은 클럭 사이클내에서 핀 상의 데이터 및 제어 신호가 어떻게 해석되어야 할 지를 나타내기 위해 스케줄러(3508)로 보내는 2 비트이고; 자세한 설명은 아래에 제공된다.
명령 핀(3511)은 양방향성이고; 그것은 16개의 명령 비트와 1개의 패리티 비트를 포함한다. 데이터 핀(3509)도 또한 양방향성이고; 그것은 32개의 데이터 비트와 1개의 패리티 비트를 포함한다.
인터페이스(3507)의 동작은 Xfer_crtl(3613)에 의해 제어된다. 두 라인의 4개의 값의 의미는 다음과 같다:
ξ00 : 메시지가 뒤에 이어지는 클럭 사이클이 아님;
ξ01 : QME(305)로부터 스케줄러(3508)로의 메시지의 제 1 사이클이 두 사이클 후 뒤에 이어지는 클럭 사이클; 메시지의 송신에 요구되는 제 1 두 사이클 동안에, D_flow_ctrl(3607)는 스케줄러(3508)로 흐름 제어 정보를 전송할 것이다;
ξ10 : QME(305)로부터 스케줄러(3508)로의 메시지의 제 1 사이클이 두 사이클 후 뒤에 이어지는 클럭 사이클; 메시지의 송신에 요구되는 제 1 두 사이클 동안에, D_flow_ctrl(3607)는 스케줄러(3508)로 흐름 제어 정보를 전송할 것이다;
ξ11 : 흐름 제어 정보가 D_flow_ctrl(3607)를 통해 스케줄러(3508)로 전송될 두 사이클이 두 사이클 후 뒤에 이어지는 클럭 사이클.
앞에서 알 수 있는 바와 같이, 모든 메시지와 함께 그리고 전송되는 메시지가 없을 땐 매 2개의 클럭 사이클마다 6비트의 흐름 제어 정보가 QME(305)로부터 스케줄러(3508)로 어쩌면 전송될 수 있다. 6비트 값은 무연산 동작(noop operation)을 명시하는 값 및 스케줄러(3508)가 D 흐름 제어 레지스터(3515)내 송신 패킷 프로세서를 위한 25개의 큐 각각에 대해 개별적인 흐름 제어 비트를 셋팅하거나 또는 리셋팅함에 의해서 반응하는 값들을 포함한다.
앞서 논의한 바와 같이, 메시지는 2, 4, 6, 또는 8 사이클 - 각 사이클이 16 비트의 명령 데이터 및 32비트의 설명자 데이터를 전송하는 사이클 - 만큼의 길이일 수 있다. 명령 데이터의 구문형식(semantics)은, 스케줄러(3508)로부터 QME(305)로의 메시지와 함께, 첫번째 사이클내 명령 데이터는 3514에서 도시한 형식을 취해야만 하고: 처음 6비트는 패턴(3615)를 가져야만 하고 마지막 6비트는 그 메시지가 향하는 큐의 번호를 포함하여야만 한다는 점을 제외하고, 스케줄러(3508) 및 QME(305)가 프로그램된 방식에 의존한다. 이러한 코스의 수는 물론 그 메시지가 배치되어질 전송 큐(3521)가 어떤 것인지를 결정한다.
도 37은 2-사이클 및 4-사이클 메시지를 갖는 인터페이스(3507)의 동작의 예를 도시한다. 2-사이클 메시지가 3701에 도시된다. 3703에서 인터페이스를 위한 클럭 사이클이 도시되고; 3613에서 그 클럭 사이클 동안에 Xfer_ctrl(3613) 상의 값이 도시되고; 3511에서 명령 데이터 핀(3511) 상에 있는 것이 도시되며; 3509에서 설명자 데이터 핀(3509) 상에 있는 것이 도시되고; 3607에서 D_flow_ctrl 핀(3607) 상에 있는 것이 도시된다. 따라서 사이클(1)내에서, Xfer_ctrl(3613)이 '01'로 셋팅되어, 다음{사이클(3)} 이후 사이클이 QME(305)로부터 스케줄러(3509)로 향하는 2-사이클 메시지(3702)의 제 1 사이클이 될 것이다라는 것을 나타낸다. 사이클(2)에서, Xfer_ctrl(3613)이 '00'로 셋팅되어, 다음 이후 사이클이 메시지의 제 1 사이클이 되지 않을 것이다라는 것을 나타낸다. 사이클(3)에서, 명령(3511) 및 데이터(3509)는 메시지에 대한 명령 데이터 및 설명자 데이터의 제 1 사이클의 분량을 포함하고, D_flow_ctrl(3607)는 스케줄러(3508)을 위한 흐름 제어 데이터의 제 1 사이클의 분량을 포함한다. Xfer_ctrl(3613)가 다시 '01'로 세팅되어, QME(305)로부터 스케줄러(3508)로의 다른 메시지의 제 1 사이클이 사이클(5)에서 시작한다는 것을 가리킨다.
사이클(4)에서, 메시지(3702)의 후반부가 보내지고, 명령(3511) 및 데이터(3509)는 명령 데이터 및 설명자 데이터의 두번째 사이클의 분량을 포함하고 또한 D_flow_ctrl(3613)는 흐름 제어 데이터의 두번째 사이클의 분량을 포함한다. Xfer_ctrl(3613)는 다시 '00'으로 세팅된다. 사이클(5 및 6)에서, 두번째 메시지가 송신되고 또한 사이클(5)에서, Xfer_ctrl(3613)은 세번째 메시지가 사이클(7)에서 시작하여, 뒤를 이를 것이라고 나타낸다.
스케줄러(3508)에서부터 QME(305)로의 두 개의 4-사이클 메시지(3707)의 송신이 3705에 도시되고; 사이클(1)에서, Xfer_ctrl(3613)은 '10'으로 셋팅되어, 사이클(3)에서 시작될 제 1 메시지가 QME(305)를 향할 것이라고 나타내고; 사이클(2-4)에서, 그 메시지가 4개 사이클 길이이기 때문에, Xfer_ctrl(3613)는 '00'로 셋팅된다. 사이클(3-6)에서, 제 1 메시지를 위한 명령 데이터(3511) 및 설명자 데이터(3509)의 4 사이클의 분량이 송신되고; D_flow_ctrl(3613)는 메시지의 처음 두 사이클, 즉 사이클(3 및 4)상에만 전송된다. Xfer_ctrl(3613)는 사이클(5)에서 다시 '10'으로 셋팅되고, 두번째 메시지의 제 1 사이클이 사이클(7)에서 시작될 것이다.
스케줄러(3508)로의 흐름 제어 정보의 전송은, Xfer_ctrl(3613)가 흐름 제어 시퀀스의 시작 2 사이클 전에 값 '11'을 가진다는 것을 제외하면, 2-사이클 메시지의 전송과 동일한 방식으로 수행된다. 사이클(3)에서, 흐름 제어 정보의 처음 3비트는 D_flow_ctrl(3607)상에서 송신되고 또한 사이클(4)에서, 두번째 3비트가 송신된다. 스케줄러(3508) 및 QME(305)는 명령 데이터(3511) 및 설명자 데이터(3509) 상의 값들을 무시한다.
버퍼 관리 엔진(315) 및 버퍼 메모리(229)의 상세한 설명
버퍼 관리 엔진(BME: buffer management engine)(315)의 주요한 기능은 DCP(203)에 수신되었을 때부터 DCP(203)에서 송신될 때까지 프로토콜 데이터 유닛이 저장되어 있는 버퍼 메모리(229) 내의 버퍼(231)를 관리하는 것이다. 다음의 기술은 먼저 버퍼 관리 엔진(315)이 패킷 프로세서에게 제공하는 버퍼 메모리(229)로의 인터페이스를 기술할 것이고 그 다음에 인터페이스의 구현의 세부사항 및 BME(315)에 의해 수행되는 다른 기능들을 기술할 것이다.
BME(315)의 논리적 개요 : 도 38
도 38은 버퍼 관리 엔진(315)에 의해 만들어진 버퍼 메모리(229)로의 인터페이스를 도시한다. 바람직한 실시예의 버퍼 메모리(229)는 32개까지의 버퍼 풀(3803)로 분할될 수 있다. n이 풀의 수라 하면, 이들 풀의 n-1개는 버퍼(231)을 포함하고, 그 버퍼(231)은 차례로 프로토콜 데이터 유닛(2503)을 포함한다. n-1개의 풀의 번호와 크기 그리고 버퍼(231)의 번호와 크기는 DCP(203)가 초기화될 때 결정되고; 하나의 풀은 64K까지의 버퍼를 가질 수 있으며 모든 버퍼(231)은 동일한 크기인데, 바람직한 실시예에서는 64바이트에서 64K바이트까지의 범위에 걸친다. 각 풀(2803)은 풀 ID(3819)에 의해 식별되고 또한 그 풀의 각 버퍼는 버퍼 태그(233)에 의해 식별되며; 하나의 버퍼(233)안에서는, 오프셋(3802)에 의해 위치가 명시되며; 여기서, 그 오프셋은 PDU(3804)의 시작을 명시하고 있다. 바람직한 실시예에서, 그 오프셋은 16바이트의 데이터량의 시작을 명시한다.
n번째 버퍼 풀(2803)은 버퍼에 대한 버퍼 태그(233)를 포함한다. n-1개 버퍼 풀(2803) 각각을 위해 버퍼 태그 큐(3805)가 있다. 버퍼 풀{2803(i)}을 위한 버퍼 태그 큐{3805(i)}는 버퍼 풀{283(i)}내 버퍼(231) 각각을 위한 버퍼 태그 엔트리(3806)를 포함하고, 버퍼{231(i,j)}를 위한 버퍼 태그 엔트리{3806(i,j)}는 버퍼{231(i,j)}의 버퍼 태그(233)를 포함한다. 각 큐(2805)는 큐의 헤드를 향한 포인터(3807) 및 큐의 테일을 향한 포인터(3809)를 가진다. DCP(203)가 초기화된 때에 그 큐는 셋업된다. DCP(203) 내 수신 패킷 프로세서가 풀{2803(i)}내 버퍼를 위한 버퍼 태그를 필요로 할 때, 큐{3805(i)}의 헤드로부터 그것을 수신하고; 송신 패킷 프로세서가 버퍼 태그를 놓아주면, 그들은 큐{3805(i)}의 테일로 되돌아간다.
물론 멀티캐스트 명령이 주어진 버퍼 태그{233(i,j)}로 설명자를 큐 관리 엔진(305)내 2이상의 큐(215)상에 배치했다면, 버퍼 태그{233(i,j)}의 최종 복사본이 되돌아오기 전에는 버퍼 태그{233(i,j)}는 큐{3805(i)}의 테일로 되돌아갈 수 없다. 이 문제는 바람직한 일실시예에서는 버퍼 태그 카운터(3811)를 통해 취급된다. QME(305) 내 2이상의 큐(215)내에 존재하는 각각의 버퍼 태그에 대해 버퍼 태그 카운터(3811) 내 엔트리(3813)가 존재하고, 엔트리는 버퍼 태그가 현재 들어있는 큐의 카운트 값을 포함한다. 그 엔트리는 풀 ID 및 버퍼 태그에 의해 어드레싱가능하다.
수신 프로세서가 설명자에 대해 멀티캐스트 인큐 명령을 만들었을 때, 그것은 그 설명자가 안에 있는 큐의 수를 나타내는 메시지를 BME(315)로 보내고; 송신 패킷 프로세서에 의해 수신된 설명자는 그 송신을 위한 DR(3111)로부터의 INC 값을 포함하며; INC가 0보다 큰 경우에는, 패킷 프로세서는 BME(315)로 BT 카운터(3811) 내 BTAG에 대한 카운터가 감소되어야 한다는 것을 나타내는 카운터 감소를 보내며; 그 카운터가 0로 감소되었을 경우, 버퍼 태그(233)가 자신의 버퍼 태그 큐(3805)의 테일로 되돌아간다.
BME(315)는 버퍼(231)에 기록을 위한 명령과, 버퍼(231)로부터의 판독을 위한 명령과, 버퍼 태그를 획득하기 위한 명령, 및 페이로드 버스(PB: payload bus)(317)를 통해 패킷 프로세서로부터의 BT 카운터내 엔트리를 셋팅하고 감소시키기 위한 명령을 수신한다. 버퍼에 기록하고 그로부터 판독하기 위한 명령은 도 39의 3901에서 도시된 형식을 가진다. 필드들은 다음의 의미를 가진다:
ξCNT 필드(3903)는 전송 내의 유효하고, 연속적인, 16바이트 분량의 수를 나타낸다;
ξT#(3905)는 주어진 패킷 프로세서에 의한 버스 트랜잭션(transaction) 사이를 구별하기 위해 사용된다;
ξ풀 ID(3907)는 버퍼 풀{3803(0...n-1)을 식별한다;
ξ오프셋(3909)은 BTAG(3911)에 의해 식별된 버퍼내 오프셋(3802)를 명시한다; 또한
ξBTAG(3911)은 버퍼(231)가 기록되고 있는지 또는 판독되고 있는지를 식별한다.
풀 ID(3907)과, 오프셋(3909), 및 BTAG(3911)은 함께 버퍼 어드레스(3913)를 구성한다. 페이로드 버스에 대한 다음의 논의에서 더 자세한 내용이 설명되는 것과 같이, 한 명령이 판독명령인지 또는 기록명령인지의 여부는 그 명령이 나타나는 페이로드 버스 사이클로부터 결정된다. 풀 ID 값(0)는 BT 풀{3803(n)}을 명시하고 또한 풀 ID 값(0x1F)는 QME(305)를 위한 명령을 명시한다. 판독 명령으로, QME(315)가 트랜잭션 #(3905)와 함께 명시된 버퍼로부터 명시량의 데이터를 요청 패킷 프로세서로 되돌린다. 따라서 요청자는 되돌아온 데이터가 어느 요청에 대응하는지를 기억하기 위해 그 트랜잭션 번호를 사용할 수 있다.
패킷 프로세서는 BTAG 풀{3803(n)}내 BTAGS(233)상에서 다음의 BTAG 판독 동작을 수행할 수 있다:
ξBTAG(233)를 할당한다; 그리고
ξBT 카운터(211)내 BTAG(233)의 CNT 엔트리(2813)를 판독한다.
BTAG 기록 동작은 다음과 같다:
ξBTAG(233)들을 초기화한다;
ξ하나의 BTAG(233)를 할당해제한다;
ξ카운터(3811)내 BTAG(233)을 위해 카운터를 셋팅한다;
ξBTAG(233)을 위해 카운터를 감소시킨다.
이들 명령의 형태는 3915에 나타난다. BT 풀 ID(3907)는 BTAG 풀{3803(n)}을 나타내는데, 여기서 BTAG가 명시되고, 그 BTAG는 BTAG필드(3911)내에 있는데, 여기서 카운트가 명시되고, 그것은 CNT (3903)내에 있고, 또한 오프셋(3909)은 BTAG명령중 하나를 명시하는 명령 값(3917)과 BTAG 명령에 의해 영향을 받은 BTAG가 속하는 버퍼 풀을 명시하는 풀 ID(3919)를 포함한다. 그 명령이 반응을 필요로 하는 곳에, 트랜잭션 번호(3905)가 그 반응과 함께 반환된다.
필드는 다음과 같이 BTAG 판독 명령내에 사용된다: 할당 명령에서, CNT(3903)는 그 명령을 발행하는 패킷 프로세서가 요청하는 BTAG의 수를 나타낸다. 그 값에 의존하여, 요청자는 풀 ID(3919)내 명시된 풀로부터 8, 16, 24, 또는 32 BTAG(233)를 수신할 것이며; 물론 BTAG 필드(3911)는 무시된다. BME(315)는 페이로드 버스 상에서 요청자에 기록하는 것을 통해 BTAG(233)을 요청자에게 반환한다.
카운터 판독 명령에서, CNT(3903)는 0으로 셋팅되고, BTAG(3911)는 BT 카운터내의 카운트 값이 판독되어야 할 BTAG(233)를 포함하고, 또한 풀 ID(3919)는 BTAG(233)이 속해있는 풀(3803)을 위한 풀 식별자(3819)를 포함한다. BME(315)는 페이로드 버스 상에서 요청자에게 기록하는 것을 통해 그 카운트 값을 반환한다.
BTAG 기록 명령에 대해 계속하자면, BTE(3806)내 BTAG(233)의 값을 셋팅하기 위해 초기화 신호가 사용된다. 그 명령에서, CNT는 초기화되는 BTE(3806)의 수를 명시하는데; 가능한 수는 8, 16, 24, 그리고 32이다. 풀 ID(3919)는 초기화되는 BTAG(233)들이 속한 풀(3803)을 명시하는데, 따라서 BTAG가 기록되어지는 버퍼 태그 큐(3805)도 명시한다.
할당해제 명령은 재사용을 위해 BME(315)로 단일 BTAG(233)를 반환한다. 그 명령에서, 풀 ID(3919)는 반환되는 BTAG(233)가 속한 버퍼 풀(3803)을 명시하고 BTAG(3911)은 BTAG(233)을 포함한다.
카운터 명령에서, 풀 ID(3919)는 셋팅되거나 감소되고 있는 카운터를 가지는 BTAG(233)을 위해 버퍼 풀 ID를 명시하고 또한 BTAG(3911)은 BTAG(233) 자체를 명시하며; 셋팅 카운터 명령에서, CNT(3903)는 카운터가 셋팅되어야 할 값을 포함한다. QME(315)는 BTAG(233)을 위해 BT 카운터내 CNT 엔트리(3813)을 생성함으로써 또한 그것을 그 명령 내에 명시된 값으로 셋팅함으로써 셋팅 카운터 명령에 반응한다. BTAG(233)에 의해 표시되는 PDU을 위해 설명자와 함께 수신 패킷 프로세서가 QME(305)로 멀티캐스트 인큐 명령을 보내는 때 셋팅 카운터 명령이 수신 패킷 프로세서에 의해 명령된다. 송신 패킷 프로세서가 PDU를 송신하였을 때 멀티캐스팅되고 있는 프로토콜 데이터 유닛(PDU: protocol data unit)을 송신하는 각 송신 패킷 프로세서에 의해 감소 카운터 명령이 명령된다. 감소되는 카운터가 0에 다른 경우, CNT(3813)이 속한 BTAG(233)이 BTAG(233)의 버퍼 풀을 위해 BTQ(3805)의 테일로 반환되고 또한 카운터(3811)내 BTAG를 위한 엔트리는 무효화 된다.
BME(315)의 구현에 대한 상세한 내용 : 도 40 및 41
버퍼 태그(233)을 할당하고 반환하기 위해 및 버퍼(231)로부터 판독하기 위해 그리고 거기에 기록하기 위해 인터페이스로서 서비스하는 것에 추가하여, BME(315)는 SDRAM(229)에의 일반적인 인터페이스로서 서비스한다. 도 41은 SDRAM(229)의 내용을 보여준다. 4103에서의 BTAG 및 버퍼 풀{3803(0...n)이외에, SDRAM(229)은 다음을 포함한다:
ξ메모리 구성 정보(4111), 이는 SDRAM(229)의 구성을 규정한다;
ξ패킷 프로세서 코드 및 데이터(4109), 이는 DCP(203)이 초기화되었을 때 XP(313)가 패킷 프로세서내로 로딩하는 코드 및 데이터를 포함하며; 채널 프로세서에 관해서는, 코드 및 데이터는 직렬(serial) 데이터 프로세서를 초기화하기 위해 사용되는 그 코드 및 데이터를 포함한다;
ξ변환표(4107)는 XP(313)가 DCP(203)의 초기화시 변환표 메모리(207)내로 로딩하는 그 변환표를 포함한다;
ξRTOS(4101)는 XP(313)에 의해 실행되는 실시간 운영체계(operating system)을 위한 코드이며; XP 데이터 메모리(4105)는 RTOS(4101)를 실행하는데에 XP(313)에 의해 사용된 데이터를 포함한다.
XP(313)는 RTOS(4101) 및 XP 데이터 메모리(4105)로부터 필요할 때 IMEM(1503) 및 DMEM(1507 및 1508)내로 지시를 패치한다.
도 40은 본 명세서의 바람직한 실시예내의 BME(315)의 하드웨어 블록도이다. BME(315)는 글로벌 버스(319) 및 페이로드 버스(317) 둘 모두에 연결된다. BME(315)는 페이로드 버스(317)을 통해 BTAG 및 버퍼 명령을 수신하고 거기에 반응하며; BME는 글로벌 버스(319) 상의 XP(313)으로부터 메모리 판독 요청을 수신하고 페이로드 버스(317)를 통해 판독 요청에 반응한다. 패킷 프로세서의 초기화는 동일한 방식으로 행해진다.
이들 버스들을 통해 BME(315)가 수신하는 트랜잭션에 대한 각 요청은 명령(4004) 및 어드레스(3913)를 포함하며, 그리고 기록 명령도 또한 데이터(3818)을 포함한다. 어드레스가 해석되는 방법은 물론 명령의 종류에 의존한다. 명령은 명령 파서(parser)(4003)내에서 파싱된다. SDRAM(229)를 구성하기 위한 명령은 다른 명령들과는 다르게 취급되며; 4001에 보여진 바와 같이, 그들은 DRAM 구성 로직(4035)으로 가는데, 그 로직(4035)은 그 데이터를 구성 FIFO(4037)로 전달하고, 거기에서부터 데이터는 DRAM 구성 레지스터(4030)내로 로딩된다.
다른 명령들이 취급되는 방법은 그것들이 판독 또는 기록 명령들인가 또는 다른 명령들인가의 여부에 의존한다. 다른 명령들은 명령 FIFO로 가고; 판독 명령에 대한 어드레스는 판독 어드레스 FIFO(4013)로 가고; 기록 명령에 대한 어드레스는 기록 어드레스 FIFO(4021)에 가고; 데이터는 기록 데이터 FIFO(4017)로 가고; 명령에 반응하여 판독되는 데이터는 판독 데이터 FIFO(4043)로 출력되는데; 이들 FIFO들은 DCP(293) 및 SDRAM(227) 사이의 인터페이스에서 필요한 융통성(elasticity)을 제공하기 위해 사용된다. 어드레스들의 경우에는, 어드레스 생성 블록(4011)이 버퍼내에서 사용된 어드레스들과 BTAG 명령들을 SDRAM(229)을 위한 적절한 형태로 변환하는데; 이것을 하기 위하여, 어드레스 생성 블록(4011)은 SDRAM(229)내 버퍼(231)가 어떻게 현재 구성되어 있는가를 명시하는 버퍼 구성 파일을 포함한다. 현재 구현된 바와 같이, 주어진 버퍼 어드레스(3913)에 대응하는 SDRAM(2029)내의 어드레스는 다음과 같이 계산된다:
SDRAM 어드레스 = 풀 베이스 어드레스(풀 ID) +
((Btag 및 Btag 마스크(풀 ID)) >> Btag 시프트(풀 ID)) CAT
((오프셋 및 오프셋 마스크(풀 ID)))
FIFO에서부터, 명령과, 판독 어드레스, 및 판독 어드레스가 각각 큐(4067, 4015, 및 4025)로 간다. 큐(4067)의 헤드에 있는 명령은 DRAM 제어(4009)에 의해 판독되고, 그 DRAM 제어(4009)는 DRAM 구성 레지스터(4039)에 현재 셋팅에 의해 요구되는 대로 그것을 해석하고 SDRAM(229)을 위한 어드레스 구동기(4019) 및 데이터 트랜시버(4041) 및 멀티플렉서(4025)에 필요한 제어 신호를 제공한다.
판독 어드레스 큐(415)의 헤드에 있는 어드레스가 어드레스 생성기(4027)에 의해 판독되는데, 그 생성기는 그 어드레스를 구동기(4019)로 제공하고 판독 동작을 나타낸다. 기록 어드레스 큐(4025)의 헤드에 있는 어드레스도 또한 어드레스 구동기(4019)에 의해 판독되고, 그것은 어드레스 구동기(419)로 어드레스 및 기록 명령을 제공한다. 동시에, 기록 데이터 큐(4029)의 헤드에 있는 데이터는 데이터 트랜시버(4041)로 출력되어, 그 데이터가 SDRAM(229)로 입력될 수 있게 한다. 어드레스 생성기(4017)는 판독 어드레스 큐(4015)에 우선순위를 부여하는데, 송신 패킷 프로세서로의 PDU의 제공은 SDRAM(229)내에 그 PDU를 저장하는 것보다 더욱 시간이 중요한 변수(time-critical)이기 때문이다.
판독 동작이 기록 데이터 큐(4029)내에 기록되어지기를 대기하고 있는 데이터를 판독하고 결과적으로 손상된 데이터를 얻게되는 상황을 회피하기 위해, BME(315)는 CAM(4023)을 포함한다. 기록 어드레스 큐(4025)의 테일에 어드레스가 기록되는 때에는, 어드레스를 위한 엔트리가 CAM(4023)내에 생성되고; 판독 어드레스 큐(4015)의 테일에 어드레스가 기록되는 때에는, 그것도 또한 CAM(4023)에 출력되고; 만약 일치가 존재하면, 판독 어드레스 큐(4015)내의 다음 어드레스가 어드레스 생성기(4017)에 의해 판독되기 전에 기록 어드레스 큐(4025)내의 어드레스의 큐가 비워진다.
BTAG 캐쉬(4031)는 각각의 BTAG 큐(3805)의 헤드 말단으로부터 BTAG(233)를 포함하고; 그 큐(3805)의 나머지는 SDRAM(229)에 있다. BTAG(233)에 대한 요청이 패킷 프로세서로부터 도착하는 때에, 가능하다면 그 요청은 BTAG 캐시(4031)로부터 충족되고; 그렇지 않은 경우에는 SDRAM(229)내의 큐(3805)의 부분으로부터 충족되며 또한 그 큐를 위한 BTAG 캐시는 큐(3805)내의 브븐으로부터 재로딩된다.
BTCNT(3811)는 BT 카운터(3811)를 구현한다. 버퍼 태그 카운트 명령은 BTCNT(3811)내의 값을 셋팅, 판독 및 감소시키고; 감소 BTAG 명령이 수신되는 때마다, BTAG의 CNT 엔트리 내의 CNT의 값이 상기한 바와 같이 감소된다.
SDRAM(229)으로부터 판독된 PDU는 판독 데이터 FIFO(4043)로 출력되고; FIFO(4043)으로부터의 출력은, DRAM 구성(4035)과, BTAG 캐시(4031), 및 BT CNT(3811)의 출력과 함께 모두 멀티플렉서(MUX)(4046)으로 가고, 그 멀티플렉서는 판독 데이터 큐(4045)로의 출력을 선택하며, 그 큐는 차례로 페이로드 버스(317)로 출력한다.
링 버스(311)의 상세한 설명: 도 28 및 42
링 버스(311)는 변환을 위해 프로토콜 데이터를 테이블 룩업 엔진(TLE : table lookup engine)(301)으로 보내고 TLE(301)로부터의 변환 결과를 수신하기 위해 패킷 프로세서에 의해서 주로 사용된다. 그러나, 링 버스(311)는 메시지를 링 버스(311) 상의 임의의 노드로 보내고 거기로부터의 답변을 수신하기 위해 사용될 수 있다. 바람직한 일시시예에 있어서 그 노드는 패킷 프로세서 및 TLE(301)이다.
링 버스(311)는 그 버스의 노드간 메시지를 위해 보장된 액세스 대역폭 및 경계지워진(bounded) 회전 지연시간(latency)을 제공하도록 디자인된다. 그 버스는 91 비트 폭인데, 27비트는 제어정보를 위한 것이고 64비트는 송신 노드로부터 수신 노드로 보내지는 데이터를 위한 것이다. 그 버스는 다양한 수의 슬롯 - 각각 하나의 중심 클럭 사이클을 포함하는 슬롯 - 으로 시간-분할 멀티플렉싱된다. 각각의 슬롯은 버킷 대열(bucket brigade) 방식으로 노드로부터 노드로 전달된다. 현재 어떤 노드에 있는 슬롯이 미점유{즉, 링 버스 메시지(2801)를 포함하지 않는 상태)인 경우, 그 노드는 그 슬롯 내의 노드들 중 하나를 위해 메시지를 기록할 수 있다(다른 실시예는 다중 노드를 위한 메시지가 하나의 슬롯 내에 기록되어지도록 허용할 수 있다). 그 다음에 그 메시지는 목적지 노드가 그것을 슬롯으로부터 제거할 때까지 노드에서 노드로 순환한다.
해당 노드가 소스인 메시지를 포함하는 링 버스(311)내에서 각각의 노드는 하나 및 다섯 사이의 슬롯을 가질 수 있다. 만약 노드가 하나보다 더 많은 슬롯을 사용하지 않는 경우라면, 그 슬롯은 링 버스(311)상에 존재하지 않는다. 본 설명에서부터 알 수 있는 바와 같이, 버스상의 하나의 노드로부터 다른 노드로 메시지를 송신하기 위해 요구되는 시간은, 각각의 노드가 링 노드상의 메시지를 포함하는 다섯 개의 슬롯을 가지는 때에 요구된 시간을 위쪽 경계로 해서, 버스상의 메시지 수에 따라 변화한다.
메시지(2801)에는 다섯 개의 유형이 있다. 각 메시지의 유형은 슬롯내의 유형(type) 필드(2807) 값에 의해 나타내어진다. 메시지의 소스인 노드는 SRC(2825)에 의해 나타내어지고 목적지인 노드는 DEST(2813)에 의해 나타내어진다. 유형은 다음과 같다:
ξ미점유(unoccupied)
ξ표시(indication), 목적지가 링 버스 메시지에 반응하는지 여부를 조사하기 위하여 소스에 의해 사용된다. '표시'는 데이터를 포함하지 않는다.
ξ확인(confirmation), '표시'의 소스에게 반응하기 위하여 '표시'의 목적지에 의해 사용된다. '확인'은 데이터를 포함하지 않는다.
ξ요청(request), 목적지가 동작하게 하고 또한 어떤 경우에는 그 '요청'의 소스에게 그 동작의 결과과 함께 응답 메시지를 반환하도록 하는 데이터를 가진 요구되지 않은 메시지.
ξ응답(response), 소스에 대하여 목적지에 의해 수행된 동작의 결과와 함께 그 '요청'의 소스에게 그 '요청'의 목적지에 의해 보내지는 메시지.
도 42는 링 버스를 향하여 각각의 노드가 가지는 링 버스 인터페이스(4201)를 보여준다. 노드가 그 목적지인 메시지를 위해 두 개의 FIFO가 있다: FIFO(4203)는 요청 메시지를 포함하고; FIFO(4209)는 노드가 그 목적지인 응답 메시지를 포함한다. FIFO(4203) 및 FIFO(4209) 둘 다 노드에 의해 판독된다. 오버플로(overflow) FIFO(4211)는 노드가 그 소스인 메시지 - 그들의 목적지가 메시지를 판독하지 않았기 때문에 링 버스(311) 상에서 계속 순환해야만 하는 메시지 - 를 위해 사용된다. 노드가 그 목적지인 메시지가 그 노드에 도착하는 경우, 자신의 유형에 의해 요구된 FIFO내에 놓여진다. 만약 그 FIFO내에 여유공간이 없는 경우에는, 메시지는 순환을 계속한다.
노드는 버퍼(4214)를 통해 링 버스(311)로 메시지를 출력하며, 버퍼(4214)는 rbus_in(4202), 오버플로우 FIFO(4211) 및 요청 FIFO(4217)로부터 메시지를 수신하며, 이 요청 FIFO(4217)는 노드에 의해 전달되고 있는 요청 메시지를 포함한다. 만약 오버플로우 FIFO(4211)가 비어있으면, 노드가 소스인 메시지가 그 노드내에 수신될 때, 그 메시지는 도착한 슬롯내에서 출력되도록 즉시 버퍼(4214)내에 놓여지고; 만약 오버플로우 FIFO(4211)가 비어있지 않으면, 그 노드가 소스인 새로-수신된 메시지는 오버플로 FIFO(4211)의 테일에 놓여지고 오버플로 FIFO(4211)의 헤드에 있는 메시지는 새로-도착된 메시지가 도착한 슬롯내에서 출력되도록 버퍼(4214)에 놓여진다. 만약 새로-수신된 메시지가 비어있고 오버플로 FIFO(4211)가 꽉 차있지 않으면, 요청 FIFO(4217)의 헤드에 있는 메시지가 비어있는 메시지의 슬롯내로 들어가고; 그렇지 않은 경우에는, 오버플로 FIFO(4211)의 헤드에 있는 메시지가 그 슬롯내로 들어간다. 이 메커니즘은, 다른 노드가 그것이 보내는 메시지를 처리하는 경우에만 그 노드가 링 버스(311)를 통해 새로운 메시지를 보낼 수 있다는 것을 보장한다. 표시 및 확인은 인터페이스(4201)에 의해 하드웨어에서 처리되며 인큐되지 않는다.
글로벌 버스 및 페이로드 버스
이들 버스의 구현에 대한 다음의 설명은 두 버스에 대해 다 사용되는 단일 버스 구조의 설명으로 시작하고 그 다음에 버스 그 자체에 대하여 상세히 설명할 것이다.
요청 버스 및 반환 버스 : 도 43 및 44
바람직한 실시예에 있어서, 글로벌 버스(319) 및 페이로드 버스(317)는 단일 기초 버스 구조 위에 시간-멀티플렉싱된다. 버스 구조가 도 43의 4301에 도시된다. 버스 구조(4301)는 슬롯화되고, 다중-채널이며, 공유되고, 조정된(arbitrated) 버스 - 파이프라이닝 및 오버랩 동작을 가능하게 하는 버스 - 이다. 각 동작은 다섯 개의 클럭 사이클 슬롯을 점유하는 하나의 요청으로 시작한다. 그 버스는 166 MHz의 클럭 속도로 동작한다. 패킷 프로세서(4303)와, BME(315), 및 QME(305)는 그 버스 구조에 모두 연결되며 본 명세서에서 버스 노드라고 지칭될 것이다.
버스 구조(4301)는 두 부분, 즉 요청 버스(4305) - 이는 버스 요청을 생성하기 위해 또한 그 요청을 위한 어드레스와 데이터를 제공하기 위해 버스 노드에 의해 사용됨 -와 반환 버스(4317) - 이는 요청하는 버스 노드에게 버스 요청의 결과를 반환하기 위해 사용됨 - 을 가진다. 요청 버스(4305)는 3개의 채널을 가진다: 명령 및 어드레스를 운반하기 위한 두 개의 명령/어드레스 채널, 즉 글로벌 버스 동작을 위해 어드레스 및 명령을 운반하기 위한 글로벌 버스 명령/어드레스 채널(4307), 페이로드 버스 동작을 위해 어드레스 및 명령을 운반하기 위한 페이로드 버스 명령/어드레스 채널(4309), 및 글로벌 버스 및 페이로드 버스 동작 모두를 위해 데이터를 운반하기 위한 데이터 채널(4311)이다. 바람직한 일실시예에서, 각 명령-어드레스 채널은 32비트폭이며 데이터 채널(4311)은 128비트폭이다. 반환 버스(4317)는 두 개의 채널, 즉 반환 어드레스 채널(4321) - 이는 반환 데이터가 반환되어야 할 어드레스 및 요청을 운반한다 - 와, 반환 데이터 채널(4319) - 이는 반환되는 데이터를 운반한다 - 을 가진다. 또, 반환 어드레스 채널(4321)은 32비트폭이며 반환 데이터 채널(4319)은 128비트폭이다. 버스 동작을 수행하기 위하여, 슬롯에 액세스했던 노드는 동작에 대해 요구되었던 명령 및 어드레스를 명령-어드레스 채널(4307)중 하나에 배치시키고 또한 동작을 위해 요구된 임의의 데이터를 요청 데이터 채널(4311) 상에 배치시킨다. 동작이 데이터를 요구자에게 반환할 때, 버스 제어(4315)는 반환 데이터의 소스에 대한 요청을 반환 어드레스 채널 상에 배치하며, 상기 요청 다음에는 반환 데이터가 반환되어야할 어드레스가 뒤따라오며, 그 다음에 반환 데이터의 소스는 반환되어야 할 데이터를 반환 데이터 채널(4319) 상에 배치한다. 버스 구조(4301)에의 노드에 의한 액세스는 버스 제어(4315)에 의해 제어된다. 다음에 더 자세하게 설명되는 것과 같이, 버스 제어(4315)는 요청 버스(4305) 및 반환 버스(4317) 둘 다의 대역폭의 보장된 부분을 각각의 노드에 제공한다.
도 44는 버스 동작이 노드에 어떻게 나타나는가를 보여준다. 각각의 슬롯은 5개의 버스 사이클을 점유한다. 하나의 명령-어드레스 채널(4307 또는 4309)상에서, 하나의 슬롯의 사이클동안 버스상의 정보가 4402에서 도시된다:
ξ사이클 0 : 요청(RQ)(4405), 동작을 명시한다;
ξ사이클 1 : 어드레스(AD)(4407), 동작을 위한 어드레스를 명시한다;
ξ사이클 2 : 버스 허가(GR)(4409) : 버스 제어(4315)가 이 사이클 동안에 어느 요청 노드가 액세스를 수신받았는지를 나타내는 신호를 반환한다;
ξ사이클 3 : 승인(ACK)(4411) : 만약 선행하는 슬롯 내에 명시된 동작이 성공하면, 버스 제어(4315)는 이 사이클 내에 승인 신호를 반환한다;
ξ사이클 4 : 어드레스(AD)(4413), 동작을 위한 두 번째 어드레스를 명시한다.
아래에서 더 자세히 설명될 것과 같이, 어드레스의 용법은 동작에 의해 정의된다.
노드가 버스 구조(4301)와 수행할 수 있는 두 개의 일반적인 동작 부류가 있다 : 4바이트의 데이터를 전송하는 짧은 동작, 및 64바이트의 데이터를 전송하는 긴 동작. 이들 부류의 각각에 있어서, 판독 동작 및 기록 동작이 있다. 주어진 슬롯(4402) 안에, 하나의 패킷 프로세서(4303)는 해당 부류의 판독 동작을 수행하고 및 또다른 패킷 프로세서는 기록 동작을 수행할 수 있다. 짧은 동작은 글로벌 버스 명령-어드레스 채널(4307)상에서 그리고 긴 동작은 페이로드 버스 명령-어드레스 채널 상에 지정된다.
도 44에 있어서, 짧은 동작이 4425에 도시된다. 짧은 동작에 있어서, 만약 그 동작에서 데이터가 기록될 것이라면, 그 동작이 요청 명령-어드레스 채널(4309)상에 요청된 동안에 슬롯(4402)내의 첫 번째 어드레스는 판독 어드레스(4415)이고 또한 만약 데이터가 판독될 것이라면, 마지막 어드레스가 판독 어드레스(4417)이다. 판독 동작에서, 요청 버스(3305)에의 액세스가 허가되었던 노드는 기록 어드레스에 의해 명시된 어드레스에 기록될 4바이트의 데이터를 슬롯(4402)의 제 5 사이클 내의 요청 데이터 채널(4311)상에 배치한다.
짧은 판독 동작으로, 버스 제어기(4315)가 판독 동작을 위해 그 버스를 허가한 경우, 슬롯(4402)의 제 4 사이클 내에 반환 어드레스 채널(4321)상으로 노드를 위한 요청(4421)을 배치한다. 버스 제어기(4315)는 다음 슬롯(4402)의 첫 번째 사이클내에 데이터(4423)를 위한 반환 어드레스를 반환 어드레스 채널(4321) 상으로 배치하고 또한 요청(4421) 내에 명시된 노드는 다음 슬롯(4402)의 세 번째 사이클내에 반환 데이터(4420) 자체를 반환 어드레스 채널(4321)상에 놓는다.
긴 동작이 4427에 도시된다. 노드가 긴 동작을 요청한 슬롯(4402)의 사이클 동안에, 노드는 긴 판독 동작을 위한 판독 어드레스(4417)를 사이클(1)내에 요청 어드레스 버스 상으로 배치하고; 노드는 긴 기록 동작을 위한 기록 어드레스(4415)를 사이클(4)내에 요청 어드레스 버스 상으로 배치한다. 긴 기록 동작에 있어서, 만약 노드가 액세스 허가를 받았다면, 노드는 다음 슬롯(4402)의 사이클(1-4)내에 기록되어질 64바이트의 데이터(4429)를 16바이트 분량으로 요청 데이터 채널(4311)상으로 배치한다. 긴 판독 동작에 있어서는, 만약 노드가 액세스 허가를 받았다면, 버스 제어기(4315)는 슬롯(4402)의 제 5 사이클 내에 응답 노드를 명시하는 요청을 반환 어드레스 채널(4321) 상으로 배치하고; 버스 제어기(4315)는 다음 슬롯(4402)의 첫 번째 사이클 내에 요청 노드의 어드레스를 반환 어드레스 채널(4321) 상으로 배치하고; 응답 노드는 유효한 반환 데이터내의 16바이트 분량의 개수를 나타내는 카운트 값(4435)을 반환 다음 슬롯(4402)의 두 번째 사이클 내의 어드레스 채널(4321) 상으로 배치하고, 또한 응답 노드는 다음 슬롯(4402)의 세 번째 사이클 내에 시작하는 4개의 16바이트 분량으로 반환 데이터(4437)를 반환 데이터 채널(4319) 상으로 배치한다.
요청 및 반환 버스 상에 글로벌 버스(319) 및 페이로드 버스(317)의 구현하는 방법 : 도 45
도 45는 어떻게 글로벌 버스(319) 및 페이로드 버스(317) 둘 다 버스 구조(4301) 상으로 멀티플렉싱되는가를 4501에서 보여준다. 도 4에서 명백했던 바와 같이, 슬롯(4402)이 5 사이클 길이이고, 한편 기록될 긴 데이터(4429)와 반환될 긴 데이터(4437)는 각각 4 사이클 길이이며 또한 기록될 짧은 데이터(4419) 및 반환될 짧은 데이터(4420)는 각각 단일 사이클 길이이다.
따라서 도 45에 도시된 바와 같이 버스 구조(4301)상으로 짧은 동작과 긴 동작을 오버랩하는 것이 가능하며 또한 그럼으로써 요청 데이터 채널(4311)의 5 사이클 마다 4개를 페이로드 데이터를 위하여 그리고 글로벌 버스 데이터의 다섯번째를 사용하는 것이 가능하며 또한 반환 데이터 채널(4319)에 대해서도 동일하다. 도 45에서, 글로벌 버스(319)를 구현한 짧은 동작이 도면의 상반부에 보여지고, 글로벌 버스(317)를 구현한 긴 동작이 도면의 하반부에 보여진다. 도면의 중간에 요청 명령-어드레스 채널(4307 및 4309)의 표현으로 도시된 바와 같이 페이로드 슬롯(4507)은 글로벌 슬롯(4503)보다 한 사이클 더 먼저 시작하고; 따라서 페이로드 슬롯(4507)에 대해 기록되어질 긴 데이터(4429)는 글로벌 버스 슬롯(4503)에 대해 기록될 짧은 데이터(4419) 및 글로벌 버스 슬롯(4505)에 대해 기록될 짧은 데이터(4419) 사이의 요청 데이터 채널(4311)상에 나타난다. 유사하게, 반환 버스(4317) 상에서, 페이로드 요청(4509)를 위해 반환될 긴 반환 데이터(4437)는 글로벌 요청(4503)을 위해 반환될 짧은 데이터 및 글로벌 요청(4505)을 위해 반환될 짧은 데이터 사이의 반환 데이터 채널(4319) 상에 나타난다.
글로벌 버스(317)상의 버스 액세스 및 어드레싱 : 도 45
도 45는 글로벌 버스(319) 및 페이로드 버스(317)를 위한 슬롯(4402)이 어떻게 짝수 슬롯과 홀수 슬롯으로 나누어지는가를 보여준다. 짝수 슬롯-홀수 슬롯 쌍은 10-사이클 기간(4502)을 만든다. 짝수 및 홀수 슬롯은 패킷 프로세서(4303)의 짝수 및 홀수 그룹에 대응한다. 그룹내 구성원들의 관계는 다음과 같다:
패킷 프로세서(4303) 그룹
채널 프로세서{307(15,13,11,9,7,5,3,1)} 홀수
채널 프로세서{307(14,12,10,8,6,4,2,0)} 짝수
실행 프로세서(313) 홀수 및 짝수
패브릭 프로세서(303) TX 홀수 및 짝수
패브릭 프로세서(303) RX 홀수 및 짝수
각 기간(4502)에서, 4개의 글로벌 버스 트랜잭션이 수행될 수 있다:
ξ짝수 슬롯에서: 짧은 판독 동작 및 짧은 기록 동작;
ξ홀수 슬롯에서: 짧은 판독 동작 및 짧은 기록 동작.
이들 트랜잭션 유형 각각에 대하여 별개의 토큰(token)이 있다. 이 토큰들은 라운드-로빈(round robin) 방식으로 그룹 - 패킷 프로세서와 함께 그룹내의 해당 동작을 위한 가장 높은 우선순위를 가지는 동작을 위한 토큰을 구비한 그룹 - 내 패킷 프로세서 사이에서 회전한다. 만약 해당 패킷 프로세서가 토큰을 구비한 트랜잭션을 요청하지 않은 경우, 오름차순으로 그 토큰과 가장 가까운 요청 패킷 프로세서가 그 버스에 허가를 얻는다. 패킷 프로세서가 버스에의 액세스를 수신하기 위한 최대 회전 지연시간은 100 사이클이다. 어떠한 패킷 프로세서도 기록 요청을 하지 않는 슬롯은 큐 상태 보고(2915)를 패킷 프로세서로 브로드캐스팅하기 위하여 큐 관리 엔진(305)에 의해 사용된다.
글로벌 버스 트랜잭션에서, 판독 어드레스(4417) 및 기록 어드레스(4415)는 딱(flat) 32-비트 어드레스이다. 반환 데이터 채널(4319)상의 어드레스(4423)는 유효한 비트이고, 수신측을 패킷 프로세서나, BME(315), 또는 QME(305) 중 하나로서 식별하는 프로세서 식별자가 그 뒤를 따른다.
페이로드 버스(317)상의 버스 액세스 및 어드레싱 : 도 45
페이로드 버스(317)상의 버스 액세스는 상기한 바와 같이 글로벌 버스(319)에 대해 작동하고; 다시, 각각의 기간(4502)은 홀수 슬롯 및 짝수 슬롯으로 분리되고, 또한 패킷 프로세서는 글로벌 버스에 대해 홀수 및 짝수 슬롯에 할당된다. 다시, 단일 기간(4502)안에는, 4개의 페이로드 버스 트랜잭션을 위한 슬롯이 있다:
ξ짝수 슬롯에서: 긴 판독 동작 및 긴 기록 동작;
ξ홀수 슬롯에서: 긴 판독 동작 및 긴 기록 동작.
QME(305) 또는 실행 프로세서(313)를 위한 특별한 배열이 없다는 것을 빼고는, 글로벌 버스에 대해 기술한 바와 같이 패킷 프로세서 사이의 우선순위를 결정하기 위해 토큰이 채용된다. 어드레스에 대해서는, 긴 판독 및 기록 동작들을 위한 어드레스는 도 39에 도시된 페이로드 버퍼 명령이다. 반환 어드레스 채널(4321) 상의 반환 페이로드 데이터를 위한 어드레스는, 그것이 3비트 트랜잭션 번호를 추가적으로 포함한다는 것을 제외하고, 반환 글로벌 데이터를 위한 그것과 같은데, 버스 제어기(4315)가 그 번호를 트랜잭션 번호(3905)로부터 데이터가 반환되어 갈 페이로드 버퍼 명령 내에 복사한다.
일반화된 데이터 스트림 프로세서로서의 DCP(203)
선행하는 논의에서 DCP(203)가 패킷 스위치에서 사용될 수 있는 방법이 개시되었던 반면, DCP(203)가 데이터 스트림이 처리되어지는 임의의 응용예에서도 사용될 수 있다는 것이 관련 당업자들에게는 자명할 것이다. 군집(aggregation)이라는 수단을 통해, DCP(203)의 채널 프로세서(307)는 직렬 비트 스트림과, 니블 스트림, 및 바이트 스트림으로 데이터를 취급하도록 구성될 수 있고, 또한 패브릭 프로세서(303)는 32비트 워드로 구성된 스트림으로 데이터를 취급할 수 있다. TLE(301)는 데이터에 의한(per-data) 스트림 컨텍스트(context)정보를 저장하고 처리하는 메카니즘을 제공하고 또한 QME(305)는, QME(305)에 연결된 외부 유닛에 뿐만 아니라, 페이로드를 포함하는 스트림을 송신하는 패킷 프로세서로 페이로드를 포함하는 스트림을 수신하는 패킷 프로세서로부터 스트림에 포함된 페이로드에 관한 정보를 전달하기 위한 메카니즘을 제공한다. 패브릭 프로세서(303)는 DCP(203)가 또 다른 DCP(203)에, 병렬 버스에, 또는 스위칭 패브릭에 연결되도록 허용하고, 따라서 다수의 DCP(203)로부터의 데이터 스트림을 처리하기 위한 큰 장치를 구성하는 것을 허용하며 또한 DCP(203)가 데이터 스트림을 처리하기 위해 다른 장치와 결합되는 것을 허용한다.
패킷 프로세서는 어떤 종류의 데이터 스트림도 취급하도록 프로그램될 수 있다. 프로그램가능한 CPRC(401) 및 각각의 패킷 프로세서내의 DMA엔진과 프로그램가능한 SDP(420)와의 조합은 스트림의 페이로드로부터 그 스트림의 제어 데이터를 추출하는 동작, 그 제어 데이터를 처리하는 동작, 및 그 페이로드를 BME(315)에 전송하는 동작을 분리하는 것이 가능하도록 한다. SDP(420) 및 DMA 엔진에 의해 스트림을 처리하는 현재 상태에 관한 정보를 유지하도록 CPRC(401)내에서의 데이터 스코프(scope)의 사용은 BME(315) 및 그 SDP(420) 사이의 페이로드의 이동과 병행하여 계속되도록 제어 데이터의 처리를 허용하며 또한 CPRC(401)의 프로그래밍을 크게 단순화시킨다. SDP(420)내의 송신 프로세서 및 수신 프로세서는 입력 스트림내의 패턴에 그리고 비트 카운트에 반응하도록 프로그램될 수 있고, 또한 우회로(bypass) 제공은 여러 가지 유형의 스트림을 취급하도록 하는 송신 프로세서 및 수신 프로세서의 쉬운 구성을 허용한다. 다른 유연성이 스트림을 재순환시키도록 SDP를 구성하는 제공에 의해, 고속의 직렬 스트림이나 니블 또는 바이트로 구성된 스트림을 취급하도록 채널 프로세서의 군집화를 제공하여, 그리고 여러 가지 유형의 송신 매체에 따라 동작하도록 I/O 핀을 구성하는 제공에 의해 얻어진다.
DCP(203)는, 패킷 프로세서 및 TLE(301) 사이의 통신을 위해 보장된 최소 회전 지연시간을 가지는 링 버스를 사용함에 의해, BME(315) 및 패킷 프로세서 사이의 페이로드 전송과, BME(315)로부터 그리고 패킷 프로세서로의 버퍼 태그의 전송, 그리고 패킷 프로세서 및 QME(305) 사이의 설명자의 전송을 위해 데이터 버스트를 전송하는 슬롯화된 버스를 사용함에 의해 데이터 스트림 처리에 내재하는 타이밍 제한사항에 대처한다. 패킷 프로세서와, QME(305), 및 BME(315) 사이의 조화는 서로 상대방의 로컬 메모리에 이들 장치에 의한 액세스를 허용하는 글로벌 어드레스 공간을 통하여 달성된다. 패킷 프로세서의 클러스터 경우에는, 클러스터의 구성원들이 서로 상대방의 로컬 메모리에 빠르게 액세스한다.
상기한 상세한 설명은 본 발명이 관련된 당업자에게, 패킷을 처리하고 경로지정하기 위해 디자인되는 디지털 통신 프로세서 집적회로로의 데이터 스트림 처리를 위하여 자신들의 기술을 채용하고 있는 본 발명자에게 현재 알려진 가장 좋은 방식을 개시하였다. 관련 당업자는 디지털 통신 프로세서의 개별적인 특징들이 본 명세서에 개시된 상황이 아닌 다른 상황에서 사용될 수 있다는 것과 본 명세서에 개시된 방식과는 다른 방식으로 조합될 수 있다는 것을 쉽게 이해할 것이다. 관련 당업자는 본 특징들을 구현하는 많은 다른 방법들이 가능하다는 것도 또한 깨달을 것이다. 앞에서 말한 모든 이유 때문에, 상세한 설명은 제한적인 것이 아니고 예시적이라는 관점에서 고려되어야만 하며, 본 명세서에 개시된 발명의 범위는 상세한 설명이 아니라 청구범위로부터 특허법에 의해 허용된 전 보호범위를 가지고 해석되는 것으로서 결정될 것이다.

Claims (10)

  1. 집적회로에 있어서,
    데이터 스트림을 수신 및/또는 송신하는 다수의 데이터 스트림 입력 및/또는 출력과,
    상기 데이터 스트림을 처리하는 다수의 데이터 스트림 프로세서로서, 각 데이터 스트림 프로세서는,
    데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되며, 지시(instruction)를 포함하는 기록가능한 지시 메모리와,
    상기 데이터 스트림 입력으로부터 수신된 상기 데이터 스트림을 처리하기 위해서 상기 지시중 특정한 지시를 순차적으로 실행하는 수신 프로세서 및/또는,
    상기 데이터 스트림 출력에 출력하기 위한 상기 데이터 스트림을 처리하기 위해서 상기 지시중 특정한 지시를 순차적으로 실행하는 송신 프로세서를 포함하는, 다수의 데이터 스트림 프로세서를 포함하는, 집적회로.
  2. 집적회로에 있어서,
    데이터 스트림을 수신 및/또는 송신하는 다수의 데이터 스트림 입력 및/또는 출력과,
    상기 데이터 스트림을 처리하는 다수의 데이터 스트림 프로세서로서, 각 데이터 스트림 프로세서는, 데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되어 있고, 상기 데이터 스트림 프로세서에 한정되는(local to) 기록 가능한 로컬 메모리를 포함하는, 다수의 데이터 스트림 프로세서를 포함하고,
    상기 다수의 로컬 메모리는 상기 데이터 스트림 프로세서중 임의의 데이터 스트림 프로세서에 의해 어드fp싱 가능한 글로벌 어드레스 공간에 속해 있는, 집적회로.
  3. 집적회로에 있어서,
    데이터 스트림을 수신 및/또는 송신하는 다수의 데이터 스트림 입력 및/또는 출력과,
    상기 데이터 스트림을 처리하는 다수의 데이터 스트림 프로세서로서, 각 데이터 스트림 프로세서는 데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되어 있는 다수의 데이터 스트림 프로세서와,
    주어진 데이터 스트림의 컨텍스트(context)에 대한 정보를 생성하여, 이 컨텍스트 정보를 주어진 데이터 스트림 프로세서에 제공하기 위해서, 데이터 스트림을 처리하는 상기 주어진 데이터 스트림 프로세서로부터 수신된 정보에 응답하는 컨텍스트 프로세서를 포함하고, 상기 주어진 데이터 스트림 프로세서는 상기 데이터 스트림을 처리하기 위해 상기 컨텍스트 정보를 사용하는, 집적회로.
  4. 집적회로에 있어서,
    제어 데이터와 페이로드(payload)를 포함하는 데이터 스트림을 수신 및/또는 송신하는 다수의 데이터 스트림 입력 및/또는 출력과,
    상기 데이터 스트림을 처리하는 다수의 데이터 스트림 프로세서로서, 각 데이터 스트림 프로세서는 데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되어 있고, 수신된 데이터 스트림은 상기 제어 데이터 및 상기 페이로드를 추출하도록 처리되며, 송신된 데이터 스트림은 상기 제어 데이터를 상기 페이로드에 더하도록 처리되는, 다수의 데이터 스트림 프로세서와,
    페이로드를 저장하기 위해 버퍼의 어드레스를 제공하고, 페이로드를 어드레싱된 버퍼에 기록하기 위한 버퍼 어드레스와의 기록 동작과, 상기 어드레싱된 버퍼로부터 페이로드를 판독하기 위한 버퍼 어드레스와의 판독 동작에 응답하는 버퍼 관리자와,
    페이로드의 설명자(descriptor)에 대한 큐(queues)를 관리하는 큐 관리자로서, 각 설명자는 적어도 버퍼 어드레스를 포함하며, 큐 관리자는 명령이 제공된 설명자를 명령에 명시된 큐에 인큐(enqueue)함으로써 인큐 명령에 반응하며, 상기 명령에 명시된 상기 큐로부터 설명자를 디큐(dequeue)함으로써 디큐 명령에 반응하는, 큐 관리자를 포함하고,
    데이터 스트림 프로세서는, 상기 수신된 데이터 스트림의 페이로드와 상기 버퍼 관리자에 의해 제공된 어드레스로 상기 버퍼 관리자에 대한 기록 동작을 수행하고, 상기 어드레스를 포함하는 설명자로 인큐 동작을 수행함으로써 수신된 데이터 스트림에 응답하며, 디큐 동작을 수행하고, 상기 버퍼 관리자에 대한 판독 동작에서 상기 디큐 동작의 결과로써 얻어진 설명자에서의 어드레스를 이용하고, 상기 버퍼 관리자로부터 수신된 상기 페이로드를 이용하여 데이터 스트림을 생성하고, 생성된 데이터 스트림을 송신함으로써 데이터 스트림을 송신하는, 집적회로.
  5. 집적회로에 있어서,
    데이터 스트림을 수신 및/또는 송신하는 다수의 데이터 스트림 입력 및/또는 출력과,
    상기 데이터 스트림을 처리하는 다수의 데이터 스트림 프로세서로서, 각 데이터 스트림 프로세서는 데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되는, 다수의 데이터 스트림 프로세서와,
    군집화된 데이터 스트림 프로세서가 데이터 스트림을 처리할 때 협력하게 하기 위해서 상기 데이터 스트림 프로세서중 특정한 데이터 스트림 프로세서를 군집화(aggregation)하는 군집기(aggregator)로서, 상기 군집기는
    상기 군집화된 데이터 스트림 프로세서사이의 구성가능한 상호연결부와,
    상기 군집화된 데이터 스트림 프로세서의 동작을 조정하는 구성가능한 동작 조정기(configurable operation coordinator)와,
    상기 데이터 스트림 프로세서를 군집화하는데 필요한 대로, 상기 구성가능한 상호 연결부와 상기 구성가능한 동작 조정기를 명시하는 구성기(configurator)를 포함하는 군집기를 포함하는, 집적회로.
  6. 집적회로에 있어서,
    데이터 스트림을 수신 및/또는 송신하는 다수의 데이터 스트림 입력 및/또는 출력과,
    상기 데이터 스트림을 처리하는 다수의 데이터 스트림 프로세서로서, 각 데이터 스트림 프로세서는 데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되며,
    제어 데이터 프로세서와,
    상기 데이터 스트림 입력으로부터 수신된 데이터 스트림을 처리하는 수신 프로세서 및/또는,
    상기 데이터 스트림 출력에 출력하기 위한 데이터 스트림을 처리하는 송신 프로세서를 포함하는, 다수의 데이터 스트림 프로세서와,
    상기 제어 데이터 프로세서, 상기 수신 프로세서 및/또는 상기 송신 프로세서에 의해 공유되고, 상기 수신 프로세서 및/또는 상기 송신 프로세서 및 상기 제어 데이터 프로세서에 의한 데이터 스트림의 파이프라인된(pipelined) 처리를 조정하기 위해서, 상기 수신 프로세서 및/또는 상기 송신 프로세서 및 상기 제어 데이터 프로세서에 의해 이용된 정보를 포함하는 데이터 구조를 포함하는, 집적회로.
  7. 집적회로에 있어서,
    데이터 스트림을 수신 및/또는 송신하는 다수의 데이터 스트림 입력 및/또는 출력과,
    상기 데이터 스트림을 처리하는 다수의 데이터 스트림 프로세서로서, 각 데이터 스트림 프로세서는, 데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되며,
    상기 데이터 스트림 입력으로부터 수신된 데이터 스트림을 직렬로 처리하는 수신 프로세서 및/또는,
    상기 데이터 스트림 출력에 출력하기 위한 데이터 스트림을 직렬로 처리하는 송신 프로세서를 포함하는, 다수의 데이터 스트림 프로세서를 포함하되,
    상기 수신 프로세서 및/또는 상기 송신 프로세서는 다수의 처리 구성요소를 가지며, 상기 데이터 스트림을 처리할 때 상기 구성요소중 하나 이상의 구성요소를 우회(bypass)하도록 구성 가능한, 집적회로.
  8. 집적회로에 있어서,
    데이터 스트림을 수신 및/또는 송신하는 다수의 직렬 데이터 스트림 입력 및/또는 출력과,
    상기 데이터 스트림을 처리하는 다수의 직렬 데이터 스트림 프로세서로서, 각 데이터 스트림 프로세서는 데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되며,
    상기 직렬 데이터 스트림 입력으로부터 수신된 데이터 스트림을 직렬로 처리하는 수신 프로세서 및/또는,
    상기 직렬 데이터 스트림 출력에 출력하기 위한 데이터 스트림을 직렬로 처리하는 송신 프로세서를 포함하는, 다수의 데이터 스트림 프로세서를 포함하되,상기 수신 프로세서는 처리된 데이터 스트림을 메모리에 기록하고/하거나 상기 송신 프로세서는 메모리로부터 처리된 데이터 스트림을 판독하며, 상기 수신 프로세서는 상기 메모리로부터 처리되는 데이터 스트림을 판독하도록 재구성가능하고/하거나 상기 송신 프로세서는 처리된 데이터 스트림을 상기 메모리에 기록하도록 재구성가능하게 되는, 집적회로.
  9. 집적회로에 있어서,
    데이터 스트림을 직렬로 수신 및/또는 송신하는 다수의 직렬 데이터 스트림 입력 및/또는 출력과,
    데이터 스트림을 병렬로 수신 및/또는 송신하는 병렬 데이터 스트림 입력 및/또는 출력의 적어도 하나의 세트와,
    상기 데이터 스트림을 처리하는 다수의 직렬 데이터 스트림 프로세서로서, 각 직렬 데이터 스트림 프로세서는 직렬 데이터 스트림 입력 및/또는 데이터 스트림 출력에 연결되고,
    상기 직렬 데이터 스트림 입력으로부터 수신된 데이터 스트림을 처리하는 직렬 수신 프로세서 및/또는
    상기 데이터 스트림 출력에 출력하기 위한 데이터 스트림을 처리하는 직렬 송신 프로세서를 포함하는, 다수의 직렬 데이터 스트림 프로세서와,
    병렬 데이터 스트림 입력의 세트에 연결된 적어도 하나의 병렬 데이터 스트림 프로세서로서, 각 병렬 데이터 스트림 프로세서는,
    병렬 데이터 스트림 입력의 세트로부터 수신된 데이터 스트림을 처리하는 병렬 수신 프로세서 및/또는
    상기 병렬 데이터 스트림 출력의 세트에 출력하기 위한 데이터 스트림을 처리하는 병렬 송신 프로세서를 포함하는, 적어도 하나의 병렬 데이터 스트림 프로세서를 포함하는, 집적회로.
  10. 집적회로에 있어서,
    신호를 수신 및/또는 송신하는 다수의 I/O 핀과,
    상기 신호에 의해 나타내어진 데이터를 처리하는 데이터 스트림 프로세서와,
    다수의 핀 구성을 명시하기 위한 기록가능한 구성 명시자(writeable configuration specifier)와,
    상기 다수의 I/O 핀과 상기 데이터 스트림 프로세서 사이에 연결되며, 상기 구성 명시자에 의해 명시된 대로 상기 I/O 핀을 구성하기 위해서 상기 구성 명시자에 응답하는, 구성 회로를 포함하여, 다수의 송신 프로토콜과 함께 이용될 수 있는, 집적회로.
KR1020007012507A 1998-05-08 1999-05-07 디지털 통신 프로세서 KR100633755B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US8470698P 1998-05-08 1998-05-08
US60/084,706 1998-05-08
US10582398P 1998-10-27 1998-10-27
US60/105,823 1998-10-27

Publications (2)

Publication Number Publication Date
KR20010043460A true KR20010043460A (ko) 2001-05-25
KR100633755B1 KR100633755B1 (ko) 2006-10-16

Family

ID=26771325

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020007012507A KR100633755B1 (ko) 1998-05-08 1999-05-07 디지털 통신 프로세서

Country Status (6)

Country Link
EP (1) EP1082668A1 (ko)
JP (1) JP2003527755A (ko)
KR (1) KR100633755B1 (ko)
CN (1) CN100422976C (ko)
AU (1) AU4071499A (ko)
WO (1) WO1999059078A1 (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7032226B1 (en) 2000-06-30 2006-04-18 Mips Technologies, Inc. Methods and apparatus for managing a buffer of events in the background
US7649901B2 (en) 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US7165257B2 (en) 2000-02-08 2007-01-16 Mips Technologies, Inc. Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts
US7058064B2 (en) 2000-02-08 2006-06-06 Mips Technologies, Inc. Queueing system for processors in packet routing operations
US7155516B2 (en) 2000-02-08 2006-12-26 Mips Technologies, Inc. Method and apparatus for overflowing data packets to a software-controlled memory when they do not fit into a hardware-controlled memory
US6965960B2 (en) 2000-03-01 2005-11-15 Realtek Semiconductor Corporation xDSL symbol processor and method of operating same
US6871257B2 (en) * 2002-02-22 2005-03-22 Sandisk Corporation Pipelined parallel programming operation in a non-volatile memory system
FR2856863B1 (fr) * 2003-06-30 2005-08-19 Thales Sa Procede et dispositif de gestion de la redondance d'un reseau de communication redondant
JP2007521688A (ja) 2003-08-27 2007-08-02 トムソン ライセンシング 伝送ネットワークマルチプレクサ
DE602005010215D1 (de) 2004-02-19 2008-11-20 Nxp Bv Elektronische stream-verarbeitungsschaltung mit testzugang
US7370123B2 (en) 2004-10-12 2008-05-06 Nec Electronics Corporation Information processing apparatus
US7831749B2 (en) * 2005-02-03 2010-11-09 Solarflare Communications, Inc. Including descriptor queue empty events in completion events
US8724636B2 (en) * 2008-03-31 2014-05-13 Qualcomm Incorporated Methods of reliably sending control signal
US9129072B2 (en) * 2012-10-15 2015-09-08 Qualcomm Incorporated Virtual GPIO
US10318305B2 (en) 2013-09-06 2019-06-11 Huawei Technologies Co., Ltd. System and method for an asynchronous processor with pepelined arithmetic and logic unit
US9674086B2 (en) * 2013-11-05 2017-06-06 Cisco Technology, Inc. Work conserving schedular based on ranking
CN105791296A (zh) * 2016-03-08 2016-07-20 浪潮集团有限公司 一种网络报文快速加解扰的方法
CN105847233A (zh) * 2016-03-10 2016-08-10 浪潮集团有限公司 一种分字段加密传输的交换机
CN105978681A (zh) * 2016-05-13 2016-09-28 浪潮集团有限公司 一种防窃听的安全交换机
CN112486704B (zh) * 2020-11-27 2024-02-06 中船重工(武汉)凌久电子有限责任公司 一种基于共享存储的多核多处理器同步与通信系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4314355A (en) * 1977-05-18 1982-02-02 Martin Marietta Corporation Apparatus and method for receiving digital data at a first rate and outputting the data at a different rate
US4935674A (en) * 1988-12-27 1990-06-19 Rca Licensing Corporation Digitally controlled convergence system
EP0654158A4 (en) * 1992-08-05 1996-03-27 Sarnoff David Res Center MASSIVE PARALLEL COMPUTER DEVICE.
US5526051A (en) * 1993-10-27 1996-06-11 Texas Instruments Incorporated Digital television system
US5870436A (en) * 1997-01-02 1999-02-09 Raytheon Company Uniform discrete fourier transform filter parameter encoder

Also Published As

Publication number Publication date
WO1999059078A1 (en) 1999-11-18
KR100633755B1 (ko) 2006-10-16
CN100422976C (zh) 2008-10-01
JP2003527755A (ja) 2003-09-16
CN1319209A (zh) 2001-10-24
WO1999059078A9 (en) 2000-06-02
AU4071499A (en) 1999-11-29
EP1082668A1 (en) 2001-03-14

Similar Documents

Publication Publication Date Title
US7647472B2 (en) High speed and high throughput digital communications processor with efficient cooperation between programmable processing components
KR100633755B1 (ko) 디지털 통신 프로세서
US6724767B1 (en) Two-dimensional queuing/de-queuing methods and systems for implementing the same
US6226267B1 (en) System and process for application-level flow connection of data processing networks
US5838904A (en) Random number generating apparatus for an interface unit of a carrier sense with multiple access and collision detect (CSMA/CD) ethernet data network
US5802287A (en) Single chip universal protocol multi-function ATM network interface
US5963543A (en) Error detection and correction apparatus for an asynchronous transfer mode (ATM) network device
US5640399A (en) Single chip network router
US5668809A (en) Single chip network hub with dynamic window filter
US7729351B2 (en) Pipelined packet switching and queuing architecture
US6522188B1 (en) High-speed data bus for network switching
JP2003508851A (ja) ネットワーク・プロセッサ、メモリ構成及び方法
JP2003508954A (ja) ネットワーク・スイッチ及びコンポーネント及び操作方法
WO1999053648A2 (en) System and process for high-speed pattern matching for application-level switching of data packets
JPH02131048A (ja) アダプタ間のパケツト転送方法、競合解消装置、及びトークン・リング装置
JP2003508967A (ja) ネットワーク・プロセッサ及び方法を用いるネットワーク・スイッチ
EP1072142A2 (en) System and process for flexible queueing of data packets in network switching
JPH05219098A (ja) フレーム変換方法及び装置
JP2003508957A (ja) ネットワーク・プロセッサ処理コンプレックス及び方法
JP2003508951A (ja) Vlsiネットワーク・プロセッサ及び方法
US20020027909A1 (en) Multientity queue pointer chain technique

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
N231 Notification of change of applicant
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: 20120924

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20130926

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20140923

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150923

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160923

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee