도 1을 참조하면, 본 발명의 원리에 따라 구성된 비휘발성 메모리 테스트 시스템에 대한 단순화된 블록도(1)가 도시되어 있다. 특히, 도시된 시스템은 36개까지의 개별적 DUT에 있어서, 각각 64개의 테스트 포인트(test point)에서, 동시에 테스트를 수행할 수 있고, 64개보다 더 많은 테스트 포인트를 가지는 DUT를 테스트하기 위하여는 테스트 리소스 집합(resource collection)의 구성 요소들이 서로 본딩되도록 재구성할 수 있다. 이들 테스트 포인트는 아직 다이싱(diced)되지 않고 패키징(packaged)되지 않은 일부 집적 회로 웨이퍼 상에 위치하고 있거나, 또는 패키징된 부품의 핀일 수도 있다. "테스트 포인트"라는 용어는 신호(예컨대, 전원(power supply), 클록(clock), 데이터 입력(data input))가 인가되거나 신호(예컨대, 데이터 출력)가 측정될 수 있는 전기적 위치를 지칭한다. 업계 관행에 따라 테스트 포인트를 "채널(channel)"이라고 지칭한다. 앞서 언급된 "서로 본딩될 테스트 리소스의 집합"은 36개만큼의 테스트 사이트라고 이해될 수 있는데, 각각의 테스트 사이트는 테스트 사이트 제어기(Test Site Controller)(4)와, (64개 채널) DUT 테스터(6)와, DUT(14)에 대하여 실제 전기적으로 연결된 (64개 채널) 핀 전자 장치(Pin Electronics) 집합을 포함한다. DUT 테스트가 64개 또는 그 이하의 채널을 필요로 하는 경우에는, 그 DUT에 대하여 테스트를 수행하기에 하나의 단일 테스 트 사이트로 충분하고, 말하자면, 예컨대, (도 1에 도시된 바에 따라) 테스트 사이트(#1)가 형성되어 "단일 사이트 테스트 스테이션"으로서 동작한다. 반면, 전술된 소정 형태의 재구성이 유효한 경우에는, 두 개(또는 그 이상의) 테스트 사이트가 서로 본딩되어 128개의 채널로 구성되는 하나의 대규모 등가의 테스트 사이트로 기능한다. 따라서, 도 1에 도시된 예를 다시 참조하면, 이른바 테스트 사이트(#35, #36)는 "2-사이트 테스트 스테이션"을 형성한다.
반대의 경우를 간단히 생각해보면, 단일 DUT를 테스트하는데 전체 테스트 사이트가 필요하다거나, 단일 테스트 사이트가 단지 하나의 단일 DUT만을 테스트할 수 있다고 생각해서는 안 된다. 웨이퍼가 둘, 셋 또는 네 개(아마도, 그러나 반드시 이 숫자여야 하는 것은 아니고, 그 정도)의 다이(die)를 가지며, 그 테스트 채널 요청의 합계가 64개 또는 그 이하의 채널이라고 가정한다. 그러한 DUT(15a-d)는 단일 테스트 사이트(예컨대, 도 2에 도시된 테스트 사이트(#2))에 의하여 동시에 테스트될 수 있다. 각 테스트 사이트의 범용 프로그램 가능성(general purpose programmability)(당연한 순서에 따라 설명될 소정의 하드웨어 특정에 의하여 증강됨)에 의하여 이것이 가능하다. 실제로, 테스트 사이트 리소소 중 일부가 DUT중 하나를 테스트하는데 이용되는 한편 다른 부분은 다른 DUT를 테스트하는데 이용되도록 테스트 사이트에 의하여 실행될 테스트 프로그램을 작성할 수 있다. 결국, 처음 두 개의 논리적 유니언(union)인 제 3 DUT가 있는 경우, 단일 테스트 사이트로 그 제 3 DUT를 테스트할 수 있다고 할 것이며, 즉 말하자면 그 "소자 DUT(component DUT)"를 유사하게 테스트할 수 있어야 한다. 물론, 두 개의 "소자 DUT"에 있어서 어느 것이 합격(pass)인지 고장(fail)인지를 개별적으로 추적하는 반면 "제 3" DUT의 경우 통합된 답이 도출된다는 점에서 중요한 차이가 있다. 즉, 제 3 DUT에 있어서는 어떤 부분에서 고장이 발생하는지에 관한 문제점이 있다. 또한 이와 달리, 결함이 있는 DUT에 대한 구동 신호를 제거하거나 제한하고, 어떤 DUT가 고장이라고 표시되는지에 근거하여 테스트 프로그램에서 분기를 일으키는 한편, 동시에 그 테스트 프로그램이 쓸모없이 멀티쓰레드(multi-thread)되지 않도록 해야하는 문제점도 있다. 이와 같은 단일 테스트 사이트의 "다수-테스트 스테이션" 능력에 관한 일부 단순한 기능은 정말로 간단하지만, 나머지는 복잡하다. 다수-DUT 테스트는 두 개 이상의 테스트 사이트를 서로 본딩하는 개념과 혼동되어서는 안된다.
이러한 테스트 사이트 재구성의 개념이 없다면 테스트 사이트와 테스트 스테이션간에는 어떠한 차이도 없을 것이고, 두 용어 중 하나는 없어도 될 것이다. 그러나, 사실, 테스트 스테이션의 수가 테스트 사이트의 수와 동일할 필요는 없다는 것을 쉽게 알게 될 것이다. 과거에는, 때때로 간단한 다수의 DUT 테스트를 위하여 테스트 사이트가 분할되어 더 많은 테스트 스테이션을 생성하였기 때문에(DUT는 전체 테스트 사이트를 사용할 만큼 복잡하지 않았다) 그 수가 서로 달랐을 수 있다. 그러나, 지금은, 그 차이가 다수-사이트 테스트 스테이션을 형성하기 위하여 테스트 사이트가 서로 본딩된다는 점에 기인할 수 있다(DUT는 단일 테스트 사이트로 처리하기에 너무 복잡하다).
그런 다음, 이어서, 테스트 시스템 제어기(2)는 시스템 버스(3)에 의하여 36 개의 테스트 사이트 제어기(그 이름이 첨자(#1) 내지 첨자(#36)로 끝남)(4a-4z)로 연결된다. (사실, a-z까지의 첨자는 26개뿐이며 36개까지가 가능하지 않다. 그러나 이러한 사소한 편법을 사용하는 것이 숫자로 된 참조 문자에 숫자로 된 첨자를 붙이는 것(이는 잠재적으로 큰 혼란을 야기할 수 있음)보다 더 바람직한 것으로 보인다.) 테스트 시스템 제어기(2)는 비휘발성 메모리 테스트 작업에 관련되는 적합한 테스트 시스템 제어 프로그램을 실행하는 컴퓨터(예컨대, NT를 실행하는 PC)이다. 테스트 시스템 제어 프로그램은 바람직한 테스트를 달성하기 위한 작업(및 복잡도)을 계층적으로 분할하여 매우 높은 수준의 추상화(abstraction)를 달성한다. 테스트 시스템 제어기는 어떠한 프로그램이 서로 다른 테스트 사이트에서 수행되고 있는지 뿐만 아니라 어떠한 프로그램이 필요에 따라 DUT와 테스트 프로브를 바꾸는 로봇 시스템(도시되지 않음)을 감독하는지 결정한다. 테스트 시스템 제어기(2)는 일부 테스트 사이트는 단일-사이트 테스트 스테이션으로 수행하도록 프로그램되고, 일부는 다수-DUT 테스트 스테이션으로 수행하도록 프로그램되는 한편, 다른 것들은 서로 본딩되어 다수-사이트 테스트 스테이션을 형성한다는 개념을 지지하는 방식으로 기능할 수 있다. 분명히, 그러한 환경에서는, 테스트되어야 하는 상이한 부품들이 있으며, 그 상이한 부품들에 대하여는 상이한 테스트가 수행되는 것이 가장 바람직하다. 유사하게, 모든 단일-사이트 테스트 스테이션이 동일한 유형의 부품을 테스트하도록 요구하는 경우는 없으며, 다수-사이트 테스트 스테이션에 대하여도 그러한 요구를 하는 경우는 없다. 따라서, 테스트 시스템 제어기(2)는 필요한 테스트 사이트 본딩을 달성하는 명령을 발행하고 그런 다음 다양한 테스트 스테이 션에서 이용될 적절한 테스트 프로그램을 호출하도록 프로그램된다. 테스트 시스템 제어기(2)는 또한 그 테스트로부터 얻어진 결과에 관한 정보를 수신하여, 잘못된 부품을 폐기하기 위한 적절한 행동을 취할 수 있으며 공장 설정(factory setting)에서 소위 생산 프로세스를 제어하는데 이용될 수 있는 다양한 분석에 관한 기록(log)을 유지할 수 있다.
테스트 시스템 그 자체는 상당히 크고 복잡한 시스템이며, 핀 전자장치(Pin Electronics)(9)에 연결된 프로브 하에 장래의 다이(웨이퍼가 아직 다이싱되지 않았음) 하나 이상을 순차적으로 배치하는 스테이지 상에 웨이퍼를 적재하는데 로봇 서브시스템을 이용하는 것이 일반적이며, 여기에서 그 장래의 다이가 테스트된다. 테스트 시스템은 또한 적절한 캐리어 상에 적재된 패키지형 부품을 테스트하는데 이용될 수도 있다. 얼마나 많은 테스트 사이트가 테스트 스테이션 형성에 이용되는지, 또는 얼마나 많은 테스트 스테이션이 테스트 사이트 상에 있는지에 관계없이, 각 테스트 스테이션에 관련하여 적어도 하나의 테스트 사이트 제어기가 (이하에서 설명되는 바와 같이) 이용될 것이다. 테스트 사이트 제어기는 내장형 시스템으로서 VOS(VersaTest O/S)라 불리는 전용 오퍼레이팅 시스템(proprietary operating system)을 실행하는 36 내지 64MB의 프로그램 및 데이터 결합형 메모리를 구비한 Intel i960 프로세서일 수 있으며, 이는 종래의 제품(예컨대, Agilent V1300 또는 V3300)에서도 비휘발성 메모리를 테스트하기 위해 이용되었다. 우선은, 단일-사이트 테스트 스테이션의 상황만을 고려한다. 명확한 예를 위하여, 테스트 사이트(#1)는 테스트 스테이션(#1)으로 기능하여, WHIZCO 부품 no.0013을 테 스트한다고 가정한다. 테스트 형태는 백 개 정도의 다양한 유형의 테스트(전압 레벨(voltage level), 펄스 폭(pulse width), 에지 위치(edge position), 지연(delay), 그리고 대규모 단순 저장 및 정보 패턴의 선택적 검출을 변화시키고 모니터링함)에 관련되며, 각 유형의 테스트는 DUT마다 수백만의 개별적 메모리 사이클과 관련된다. 최상위 레벨에서, 테스트 시스템의 오퍼레이터는 테스트 시스템 제어기(2)에 대하여 테스트 스테이션(#1)을 이용해서 WHIZCO 0013을 테스트하기 시작하도록 지시한다. 결국 테스트 시스템 제어기(2)가 테스트 사이트 제어기(#1)(4a)(내장형 [컴퓨터] 시스템임)에 대하여 관련된 프로그램, 즉 TEST_WHIZ_13을 실행하도록 지시한다. 테스트 사이트 제어기(#1) 환경에서 이미 프로그램이 이용 가능하다면, 단순히 그것을 실행한다. 그렇지 않다면, 테스트 시스템 제어기(2)가 이를 보완한다.
원칙적으로, 프로그램 TEST_WHIZ_13은 독립적(self-contained)일 수 있다. 그러나 만약 그렇다면, 분명히 상당히 큰 규모일 것이며, 이런 경우 테스트 사이트 제어기(4a)내의 내장형 시스템의 프로세서가 바람직한 속도, 심지어 하나의 DUT 메모리 사이클로부터 다음 사이클까지 일정한 속도로 테스트를 실시할 수 있을 만큼 충분히 빨리 실행하도록 하는 것이 곤란해질 수 있다. 따라서, 어드레스 시퀀스와 기록될 또는 판독 동작에서 예상되는 관련 데이터를 생성하는 하위 레벨의 서브루틴 유형 동작은 필요에 따라서 DUT 테스트(6)내에 위치한 프로그램 가능 알고리즘 메카니즘에 의해 발생되지만, 이는 테스트 사이트 제어기(4)내의 내장형 시스템에 의해서 실행되는 프로그램과 동기식으로(in synchrony) 동작한다. 이것을, 소정의 하위 레벨 서브루틴 유사 동작(subroutine-like activity) 및 DUT 메모리 사이클을 개시 작업을 DUT(14)의 하드웨어 환경에 보다 밀접한 메카니즘(DUT 테스터)으로 전달(export)하는 것으로 생각하기 바란다. 일반적으로 말해서, 테스트 시스템 제어기(2)가 테스트 사이트 제어기에 대하여 테스트 프로그램을 갖추도록 하는 경우마다, 테스트 사이트 제어기용 프로그래밍에서 지정되거나 혹은 필요로 되는 전체 동작을 달성하는데 필요한 적절한 하위 레벨 구현 루틴(아마도 테스트되는 메모리에 특정한 루틴)을 관련 DUT 테스터에게 공급한다. 그 하위 레벨 구현 루틴은 "패턴"이라는 용어로서, 일반적으로 이름 붙여진다(고급 프로그래밍 언어에서는 함수 및 변수라고 이름붙여지는 것과 마찬가지임).
각각의 테스트 사이트 제어기(#n)(4)는 사이트 테스트 버스(#n)(5)에 의하여 그 관련된 DUT 테스터(#n)(6)로 연결된다. 테스터 사이트 제어기는 사이트 테스트 버스를 이용하여 DUT 테스터의 동작을 제어하고 그로부터 테스트 결과에 관한 정보를 수신한다. DUT 테스터는 테스트 형태에 관련된 다양한 DUT 메모리 사이클을 고속으로 생성할 수 있으며, "판독" 메모리 사이클의 결과가 예상된 것과 같은지를 판정한다. 본질적으로, 대응하는 유용한 판독 및 기록 DUT 메모리 사이클 시퀀스를 개시함으로써 테스트 사이트 제어기로부터 전송된 명령 또는 작동 명령어에 응답("패턴이라 불림")한다(즉, 대응하는 패턴을 실행한다). 개념적으로, DUT 테스터(6)의 출력은 DUT로 인가될 자극 정보가 되고, 또한 DUT로부터의 응답 정보를 수용한다. 이러한 자극/응답 정보(7a)는 DUT 테스터(6a) 및 핀 전자 장치(#1) 어셈블리(9a) 사이를 통과한다. 핀 전자 장치 어셈블리(9a)는 DUT(14)로 인가될 수 있 는 64개까지의 프로브를 지원한다.
전술한 자극 정보는 DUT 테스터에서 이용되는 소정의 논리 장치군의 전압 레벨에 따라서 표현되는 병렬 비트 패턴의 시퀀스(즉, "송신 벡터" 및 예상되는 "수신 벡터"의 시퀀스)이다. 자극/응답내의 비트 위치와 다이로 가는 프로브 사이에 구성 가능한 매핑(configurable mapping)이 있으며, DUT 테스터(6)가 이 매핑을 이해한다. 개개의 비트는 그 타이밍 및 에지 위치에 관하여 올바르지만, 매핑에 더하여 DUT로 인가될 수 있을 때까지 전압 레벨 시프팅(voltage level shifting)을 필요로 할 수 있다. 이와 유사하게, 자극에 의하여 DUT에서 발생하는 응답은 DUT 테스터로 다시 입력하기 적당하다고 생각되기까지 버퍼링(buffering)과 (역(reverse)) 레벨 시프팅을 할 필요가 있을 수 있다. 이런 레벨 시프팅 작업은 핀 전자 장치(9a)의 책임이다. WHIZCO 0013을 테스트하기 위하여 필요한 핀 전자 장치 구성은 ACME사 부품을 테스트하는데 유효하지 못할 것이고, 아마도 심지어 다른 WHIZ사 부품에 대하여도 그러하지 못할 것이다. 그러므로, 핀 전자 장치 어셈블리가 또한 구성 가능할 필요가 있음을 알 것이다(그러한 구성 가능성은 PE Config 라인(8a)의 기능임).
이상으로 단일 테스트 사이트가 DUT 테스트를 위하여 어떻게 구성되는지에 관한 간단한 구조적 개요를 설명하였다. 이제 많은 테스트 사이트가 동작하는 경우 일어날 수 있는 문제에 관하여 논의하기로 한다. 예비적으로, 다수의 테스트 사이트를 가지는 테스트 시스템을 구성하는 바람직한 실시예를 설명할 것이다. 많은 측면에 있어서, 이제 설명하고자 하는 정보 중 일부는 고객 선호도와 비용 이익 분석의 시장 조사를 기초로 하는 선택의 문제이다. 어찌되었건, 이들 중 하나를 구성하기 위하여 일정한 선택을 하여야하며, 일단 선택이 이루어지면 전체 시스템을 통하여 명백한 특정 결과가 발생한다. 어쨌든 일반적으로는, 테스트 시스템의 하드웨어 특성에 관한 더 많은 개요를 설명하는 것이 유용할 것이다. 특성들 중 일부는 우연에 의한 것이라고 할지라도, 그럼에도 불구하고 이러한 특성들을 아는 것이 본 발명의 설명에 이용되는 다양한 실시예를 이해하도록 도울 것이다.
먼저, 네 개의 다소 큰 카드 케이지(card cages)를 생각한다. 각 카드 케이지는, 전원(power supplies) 및 워터 쿨링(water cooling)(팬(fan)은 청정실 환경에서 오염원이 될 수 있으며, 완전 로드형 시스템(fully loaded system)에 있어서 수십 KW의 분산열(dissipated heat)을 제거하기 위하여 공기를 냉각하는 것보다는 냉각수(chilled water)를 이용하는 편이 저렴함)에 더하여, 본체 기판(mother board)과, 프론트 플레인(front plane)과, 백 플레인(back plane)을 가진다. 각 카드 케이지에 대하여 9개까지의 어셈블리가 배치될 수 있다. 각각의 어셈블리는 테스트 사이트 제어기와, DUT 테스터와, 핀 전자 장치를 포함한다. 테스트 사이트 제어기가 서로 본딩되는 방법의 일반적 개요를 설명할 것이며, 데이지 체인(daisy chain)을 생성하기 위하여 버스를 일부 이용할 것이다.
본론에서 벗어나 "데이지 체인"이란 용어에 관하여 간단히 설명하겠다. 시스템 요소 A, B, C 및 D가 있다고 가정한다. 이들이 그 순서로 데이지 체인 되어야 한다고 가정한다. A를 떠나 B로 가는 정보 및 제어 경로가 있고, 그런 다음 B는 B를 떠나 C로 가도록 트래픽을 선택적으로 전달할 수 있으며, 그런 다음 C는 C 를 떠나 D로 가도록 트래픽을 선택적으로 전달할 수 있다고 말할 수 있다. 반대쪽 방향으로의 트래픽에 관하여도 이러한 동일한 종류의 배열이 존재할 수 있다. 데이지 체인은 종종 우선 순위 방안을 구성하고자 이용되는데, 여기서는 다양한 테스트 사이트 제어기들 사이에 마스터/슬레이브 관계를 생성하는데 이용할 것이다. 이들 데이지 체인 유형의 통신 장치는 "BUS" 대신에 첨자 "DSY"로 표시될 것이다. 따라서, 명령어/데이터 버스 대신에 명령어/데이터 DSY라고 말할 수 있다. 정보가 "B로 입력되어 선택적으로 전달된다"는 개념은 트래픽이 전달 이전에 별도의 도전체 세트로 복제되어야 한다는 것을 의미할 수 있다. 그러한 방법은, 성능상의 이유가 아니라면 어드레스 가능한 엔티티를 가지는 정규 버스와 더욱 유사한 것일 수 있다. 프로그램 가능 어드레스 매핑 장치와 다운스트림 테스트 사이트 제어기의 일부를 "수면(to sleep)" 상태에 있게 할 수 있는 능력에 의하여, 단일 버스가 논리적으로 다수의 데이지 체인처럼 보이게(즉, 그렇게 기능하게) 구성될 수 있다. 결국, 데이지 체인은 명령어와 제어 정보를 위한 고성능 경로라고 할 수 있고, 만약 그렇지 않다면, 마스터/슬레이브 조합(다수-사이트 테스트 스테이션)이 단일 테스트 사이트만큼 빨리 작동한다고 예상할 수 없다. 데이지 체인 성능의 이점을 위하여, 다양한 DSY는 그 각각의 카드 케이지를 벗어나지 않는다. 이러한 결정의 효과는 어떠한 테스트 사이트(그리고 또한 얼마나 많은 테스트 사이트)가 서로 본딩될 수 있는지에 관하여 일정한 제한을 설정한다. 원칙적으로, 이러한 제한이 반드시 요구되는 것은 아니며, 또한 그에 관하여 기술적으로 실현 가능성이 없는 것도 아니지만(실현 가능할 수 있음), 카드 케이지에는 이미 9개의 테스트 사이트가 있 으므로, DSY를 확장하는 것은 상대적으로 적은 이점에 비하여 너무나 많은 부가 비용을 추가하는 것처럼 보인다.
도 1에 관한 설명을 재개하면, 네 개의 카드 케이지에 존재하는 다양한 테스트 사이트 제어기(4a-4z)를 고려한다(각각의 카드 케이지는 9개의 테스트 사이트 제어기를 구비함). 이들을 참조 번호(4a-4f), 참조 번호(4g-4m), 참조 번호(4n-4t) 및 참조 번호(4u-4z)라고 표시한다. (이전에 설명했던 바와 같이, 이들은 명목상 26개의 첨자뿐임은 신경 쓸 필요가 없으며, 독자는 어딘가 또 다른 10개의 첨자 심볼이 있을 것이라고 생각하기 바란다.) CMD/DAT DSY(17a)(명령어 및 데이터 데이지 체인)는 하나의 카드 케이지에 있는 테스트 사이트 제어기(4a-4f)를 상호 연결하는 반면, 다른 CMD/DAT DSY(17b)는 또 다른 카드 케이지에서 테스트 사이트 제어기(4g-4m)를 상호 연결한다. 나머지 카드 케이지에서도 동일한 장치가, 테스트 사이트 제어기(4n-4t)와 테스트 사이트 제어기(4u-4z)를 각각 상호 연결한다. 앞서 DSY는 카드 케이지를 벗어나지 않으며, DSY를 실제로 형성하는 버스의 "테일 엔드(tail end)"가 카드 케이지를 벗어나지 않고 또 다른 카드 케이지에서 다음 세그먼트의 헤드(head)가 된다고 설명한 바 있다. 대신에, 테스트 시스템 제어기(2)로부터의 시스템 버스(3)는 테스트 사이트 제어기 전체로 연결되며, 각각은 카드 케이지를 벗어나지 않는 DSY 세그먼트의 헤드에서 마스터가 될 수 있다.
지금까지 논의해 온 CMD/DAT DSY(17a-17d)는 다양한 테스트 사이트 제어기(4a-4z) 사이에 존재한다. SYNC/ERR DSY(18a-18d) 및 DUT 테스터(6a-6z)에 대하여도 유사한 장치가 있다. SYNC/ERR DSY(18)에 의하여 전달된 동기화 및 에러 정보는 DUT 테스터가 일치하여 작동할 수 있게 해준다. 이들 두 개의 데이지 체인(17,18)은 약간씩 다른 유형의 정보를 전송하지만, 각각은 하나 이상의 테스트 사이트를 하나의 테스트 스테이션으로 서로 본딩하는 동일한 일반적 메카니즘의 일부로서 존재한다.
이제 도 2를 참조하면, 도 1의 DUT 테스터를 확장하여(36개까지 있을 수 있음) 도시하는 단순화된 블록도가 도시되어 있다. 지금은 하나의 경우만을 설명하는 것으로 충분하다. 도 2를 언뜻 보면, 상당히 조밀하게 구성된 것으로 보일 것이며, 특히 "단순화된" 블록도로서는 더욱 그러하게 보일 것이다. 블록도에 표시된 DUT 테스터(6)에 있는 것들 중 일부는 기능적으로 상당히 복잡하고, "오프 더 쉘프(off the shelf)" 형태로는 이용가능하지 않다. 여기서 두 가지 포인트를 지적할 필요가 있다. 첫 번째, 도면 세트에 도 2를 포함하는 주요 목적은 전체 비휘발성 메모리 테스트 시스템(1)내에서의 중요한 동작 환경의 기본 특성을 설명하고자 하는 것이다. 도 3과 그 이후의 도면들에 의하여 더욱 상세히 설명되는 본 발명은 다음의 도 2에 관한 설명에서 시작되는 메카니즘을 확장한 메카니즘이나 도 2로부터 그 동기적 전제 조건(motivational premise)이 부여되는 새로운 메카니즘일 것이다. 어느 쪽이든, 본 명세서를 작성하는 동안은 독자 앞에 어떤 것이 있는지 정확히 알 수가 없다. 현재의 목표는 수많은 바람직한 실시예에 관한 서로 다른 상세한 설명을 위하여 도움이 되는 단순화된 시작점을 제공하여, 그 상세한 설명 각각이 적절한 정도로 간결해지도록 하는 것이다(서로 다른 발명 각각에 있어서 모든 것을 설명하는 하나의 "점보(jumbo)" 명세서가 되지 않도록). 두 번째는, 확대 된 또는 확장된 요소가, 대개 전체적으로는 도 2와 일치하지만, 그 단순화된 버전과 정확하게 "매치(match-up)"되지는 않는 정보를 포함할 수 있다는 점이다. 이는 에러가 있다거나 또는 이들이 치명적으로 일관성이 없다는 것을 의미하는 것은 아니며, 때때로 무엇인가를 단순화하여 미니어처로 그 정확한 이미지를 나타내는 것이 곤란하거나 불가능하기 때문에 발생하는 것이다. 이러한 상황은 지도에서의 경우와 유사하다. 표준 사이즈의 콜로라도 지도는 I-70상에서 동쪽으로 가는 경우 덴버에서 I-25를 따라 북쪽으로 갈 수 있는 것을 보여줄 것이다. 이는 좌회전처럼 보인다. 이는 과거에는 실제로 좌회전이었으나 지금은 그렇지 않고, 그 교차로에 대한 상세한 지도에서 보면 일련의 구성 요소적 회전과 사이에 끼어있는 사거리가 있음을 알 수 있을 것이다. 그러나 누구도 그 표준 사이즈 지도가 잘못되었다고 말할 수 없으며, 그 추상화 레벨에 있어서는 올바른 것이다. 마찬가지로, 도 2는(상당히 복잡하게 보이는 그 외관에도 불구하고) 실제로 중간 레벨의 추상화로써 동작하는 간이한 것이지만, 일부 외관상 좌회전이 단순한 좌회전만은 아닌 경우도 있다.
도 1에 도시된 바와 같이, DUT 테스터(6)로의 주 입력(major input)은 하나의 테스트 사이트 버스(5) 인스턴스인데, 이는 관심의 대상이 되는 DUT 테스터(6)의 인스턴스와 연관된 테스트 사이트 제어기(4)로부터 시작된다. 테스트 사이트 버스(5)는 테스트 사이트 버스 상의 트래픽을 링 버스(Ring Bus)(85) 또는 VT 버스(89) 상의 트래픽으로 변환하는 멀티버스 제어기(multi-Bus Controller)(88)에 결합된다. 반대로 링 버스 트래픽이 VT 버스 트래픽으로 변환될 수도 있다. 도 2 의 거의 모든 부분은 대규모 집적 회로의 일부이며, (간단하게 하기 위하여 하나의 엔티티로 도시되어 있지만) 타이밍/포매팅 & 비교 회로(이하에서 설명됨)는 실제로 그러한 IC 8개로 이루어져있다. 다양한 Ext. DRAM(그 일부는 또한 내부 테스트 메모리(87)의 일부분임(도 3 참조))을 제외하고는, 도 2의 스터프 나머지 대부분은 APG(Automatic Pattern Generator)라 불리는 또 다른 대규모 IC의 일부이다. 링 버스(85)는 DUT 테스터(6)의 APG 부분 내에서 주요한 구성 요소를 배열하고, 동작 모드를 설정하는 등의 목적을 위한 범용 메카니즘간(inter-mechanism) 통신 경로이다. 또한 여러 APG 구성 요소사이에 매우 넓고 빠른 많은 전용 경로가 있다. VT 버스(89)는 DUT 테스터 그 자체내부에서 이용하는 IC 대 IC 버스이다.
링 버스(85)는 테스트 사이트 제어기가 DUT 테스터(6)의 APG 부분과 통신하는 메카니즘이다. 링 버스(85)는 마이크로 제어기 시퀀서(19)(이는 특수 목적 마이크로프로세서에 비유될 수 있음)와 결합된다. 넥스트 어드레스 계산기(Next Address Calculator)(102)에 의하여 생성된 어드레스를 이용하여, 마이크로제어기 시퀀서는, 그 마이크로 제어기 시퀀서(19)의 내부의 프로그램 메모리(PGM SRAM(20)) 또는 그 외부의 프로그램 메모리(EXT. DRAM(21)) 중 하나일 수 있는, 프로그램 메모리에 저장된 프로그램으로부터의 명령을 페치(fetch)한다. 이들 두 개의 메모리가 프로그램 카운터(또는 명령 페치 어드레스)로서 역할하는 본질적으로 논리 공통 어드레스(63)인 것에 의해 어드레싱되고, 둘 중 어느 하나가 수행될 프로그래밍의 소스가 될 수 있으나, (1) 임의의 시간 주기 동안에는 메모리 중 오직 하나만이 명령어 페치 메모리 사이클을 수행하고, (2) 실제로 두 메모리는 전기 적으로 상이한 신호에 의해 어드레싱된다는 점에 유의해야 한다. SRAM은 고속이고 진정한 임의 액세스를 허용하지만, 마이크로시퀀스 제어기(19)(대규모 APG IC의 일부임)내의 유용한 공간을 소모하기 때문에, 그 크기가 제한된다. 외부 DRAM은 많은 양의 조절 가능한 용량으로 제공될 수 있지만, 선형 실행(linear execution)으로 이루어지고 어떠한 분기도 포함하지 않는 순차적 청크(chunk)로 액세스될 때에만 고속이다. 알고리즘적으로 집중적인 것은 SRAM(20) 프로그래밍이 대개 흔한 반면, 초기화 루틴과 무작위 데이터나 비정규 데이터 등과 같이 알고리즘 프로세스에 의해 그리 잘 생성되지 않는 요소에 대하여는 EXT. DRAM(21)가 가장 적합하다.
넥스트 어드레스 계산기(102)는, 어느 명령어로의 무조건 분기(unconditional jump), 또는 조건 분기나 조건적 서브루틴 명령어(이는 다수 DUT 동작을 위하여 제공되는 여러 PROGRAM CONTROL FLAGS(25), OTHER FLAGS(55), 그리고 명확성을 위하여 별도로 도시된 기타 신호(DFE 0:3(103) 및 DPE 0:3(104))에서 조절됨)에 응답하여, 실행되는 테스트 프로그램에서 분기를 구현할 수 있다.
마이크로 제어기 시퀀서(19)에 의하여 페치되고 수행되는 명령어 워드는 208비트로 꽤 길다. 명령어 워드는 13개의 16비트 필드로 구성된다. 이들 필드는 대개 마이크로 제어기 시퀀서 외부의 적합한 메카니즘을 위하여 페치된 명령 정보를 나타낸다. 그러한 필드는 그 관련된 메카니즘에 전용된다. 하나의 ALU INSTRUCTION(22) 세트가 8개의 16비트 ALU 집합(24)에 제공되고, 이와 다른 ALU INSTRUCTION 세트가 DUT 테스터 도처에 분포된 다양한 기타 메카니즘에 분배된다. 후자의 경우가 "VARIOUS CONTROL VALUES & INSTRUCTIONS"(42) 라인 및 범례(legend)에 의하여 표시된다.
8개의 16 비트 ALU(24) 각각은 관련된 16비트 결과 레지스터(result register)(각각의 ALU는 또한 다른 여러 레지스터도 포함함)에 기초하여 구성된 통상적 산술 명령 레퍼토리를 갖는다. 이들 결과 레지스터 중 3개의 레지스터와 이에 연관된 ALU는 DUT에 제공될 완결 어드레스(complete address)로 다양하게 결합되는 X, Y 및 Z 어드레스 성분(27)을 생성하기 위한 것이다. 8개의 ALU/레지스터(DH & DL) 중 둘 이상이 최대 유효부(most significant portion : DH)와 최소 유효부(least significant portion : DL)로 분할되는 32비트 데이터 패턴(28)의 알고리즘적 생성을 지원하는데 제공된다. 마지막 3개의 ALU/레지스터(A, B, C)는 카운터로 이용되고, 프로그램에 의하여 지정된 일정한 반복 횟수 또는 기타 다른 횟수 조건이 완료되는 경우의 분기와 프로그램 제어를 지원하는 다양한 PROGRAM CONTROL FLAGS(25) 생성에 기여한다. 이들 PROGRAM CONTROL FLAGS(25)는 마이크로 제어기 시퀀서(19)로 되전송되어, 마이크로 프로그램형 실행 메카니즘의 경우와 유사한 방식으로 명령 페치 어드레스(넥스트 어드레스 계산기(102)에 의하여 생성됨)의 값에 영향을 미친다. 또한 프로그램 분기 실행에 이용될 수 있는 다양한 기타 플래그(55)가 존재한다. 이러한 플래그(55)는 페치된 명령어 워드의 서로 다른 필드에 의하여 제어되는 DUT 테스터(6)내의 다양한 기타 메카니즘으로부터 비롯된다. 특정한 추가 플래그 하나는 별도의 아이템, PD_ERROR(90)로 특별히 표시되어 있다. 이는 PGM SRAM(20)으로 공급되며, 포스트 디코드 메카니즘(60)으로부터 비롯되어, 그 포스트 디코드 메카니즘(60)에 에러가 있음을 표시한다. 또 다른 이와 같은 추가적 플래그는 VEC_FIFO_FULL(26)이다. 보다 덜 세부적인 다른 도면에서는, OTHER FLAGS(54)로 함께 일괄적으로 취급될 수 있다. 본 명세서에서는 마이크로 제어기 시퀀서(19) 동작의 한 특징을 설명을 돕기 위하여 이를 별도로 분리하고 있다.
VEC_FIFO_FULL은 마이크로 제어기 시퀀서(19)에 의한 추가적 프로그램 수행을 (일시적으로) 중지시키는 기능을 수행한다. 마이크로 제어기 시퀀서(19)에 의하여 페치되는 명령과 DUT에 적용될 테스트 벡터를 최종적으로 핸드 오프하는 메카니즘 사이에는 많은 단계의 파이프라인이 존재한다. 또한, DUT에 적용되도록 진행하는 동안 벡터에 수반하는 정보(baggage)의 일부는 궁극적인 벡터 애플리케이션의 속도 또는 각각의 벡터 지속 시간에 관련된 정보이다. 따라서, DUT로의 벡터 애플리케이션의 속도가 일정할 필요는 없으며, 특히 어떤 그룹의 벡터는 생성하는데 걸린 시간보다 적용하는데 더 오래 걸릴 수 있다. 마이크로 제어기 시퀀서는 단지 자신의 최대 속도로 프로그래밍을 수행한다. 그러나 명백하게, 파이프라인이 거의 무제한으로 탄력적(elastic)이지 않도록, 평균적으로 "벡터 소모"의 속도는 "벡터 생성"의 속도와 동일해야 한다. 벡터 FIFO(45)는 후술할 어드레스 매퍼(29)의 출력에 존재하여, 파이프라인에서 탄성 수용체(elastic capacity)로 기능한다. VEC_FIFO_FULL 신호는 파이프의 헤드 엔드(head end)에서 새로운 벡터의 생성을 일시 중지시켜 그 파이프라인에서 제한된 수의 단계를 초과하는 것을 방지하는데 이용된다.
계속하여, (16비트의 3배인 48비트의) X, Y 및 Z 어드레스 성분(27)이 어드 레스 매퍼(29)에 제공되며, 그 어드레스 매퍼(29)는 순서화된 48비트 어드레스 공간에서 거의 임의적으로 재구성된 어드레스 값으로 사전 선택하여 출력한다. 이것을 이해하기 위한 전제로서, 어드레스 매퍼(29)는 완전히 채워진 48비트 어드레스 공간인 메모리이고 각각의 어드레스에서 48비트 값을 보유한다고 먼저 가정한다(그런 메모리는 오늘날 대형 냉장고 사이즈가 임은 잠시 생각하지 않기로 한다). 이런 메모리가 주어지면, 어떠한 어드레스가 인가되었을 경우 대체 어드레스로 이용될 수 있는 또 다른, 임의적으로 선택된, 48비트 값으로 그 어드레스를 매핑할 수 있는 룩업 테이블(look-up table)이 구현될 수 있다. 이런 어드레스 매핑이 바람직한 이유는 X, Y 및 Z 어드레스 성분이 특정한 DUT 내부 아키텍처(대개는 하나의 큰 선형 디코더로 구현되지 않음)의 관점에서 유용한 의미를 갖기 때문이다. 행, 열 및 계층(layer), 블록(block) 또는 페이지(page)의 개념은 테스트 엔지니어에게 매우 유용할 수 있으며, 물리적으로 서로 가까운 위치에서 오류가 발생한다면 그 X, Y 및 Z 어드레스에 대응하는 접근성(closeness)이 있을 것이다. 테스트 결과에서의 이런 패턴은 무엇이 오류인지를 인식하는데 중요하며, 또한, 설계 레벨에서이거나 또는 예비 섹션의 동작으로 오류 섹션의 동작을 회피하도록 부품을 재프로그래밍하는 생성 레벨에서이거나, 그 오류를 정정하는데 중요하다. 이러한 개념에서 두 가지가 문제된다. 첫 번째는 DUT에 제공될 실제 비트 수에 대하여 48비트(말하자면, 32비트, 혹은 16비트)를 줄이는 문제이다. 여기서 그 줄이는 방법을 간략히 언급할 것인데, 이는 주로 X로부터 얼마의 비트를 취하고, Y로부터 얼마의 비트를 취하고, Z로부터 그 나머지 비트를 취하는 문제이다. 그러나 이것이 전체적인 것 은 아니며, 또한 이는 부차적 문제인데, 소정 어드레스가 회로 내에 놓여있고 그 회로는 회로의 다른 섹션에 대한 좌-우(left-for-right)(또는 좌-우 및 상-하) 대칭 상(mirror image)을 가질 수 있기 때문이다. 이는 그 회로 내 물리적 순서대로 어떠한 순차적 어드레스 값이 주어지는지에 관한 한, 그 비트가 가리키는 바를 재구성하는 효과를 가져온다. 이러한 칩 레이아웃 특성은 수 차례 발생할 수 있고, 말하자면, Y에 대한 하나의 비트 그룹이 해석되는 방법이, 말하자면, 수반하는 Z비트의 값에 의존하는 경우 이는 당연할 것이다. 어드레스 매퍼(29)가 제공되어 원래의 X, Y 및 Z 어드레스가 "재패키징"되도록 하고, 말하자면, 그러한 내부 구조 배열을 갖는 메모리를 테스트할 사람을 돕기 위하여 이러한 유형의 일을 반영한다. 실제 이루어지는 방법에 관하여, 어드레스 매퍼(29)는 상당히 많은 수의 상호 접속형 멀티플렉서(interconnected multiplexer)로 구성된다. 이는, 설명을 위하여 앞서 임시로 가정하였던 완전히 채워진 메모리 디코드 방안(fully populated memory decode scheme)에 있어서 완전히 임의적인 룩업 테이블 동작(completely arbitrary look-up table behavior)을 구현할 수 없다. 그러나, 어드레서 매퍼(29)는 필요에 따라 X, Y 및 Z 어드레스 성분의 서브필드를 재구성할 수 있는데, 특히 이는 48비트를 실제 필요한 수로 감소시킬 이와 다른 메카니즘이 역시 존재하기 때문이다. 어드레스 매퍼(29)는 또한 지역적 범위 내에서 제한된 임의 매핑을 수행하는 3개의 16비트(어드레스) 룩업 테이블을 포함한다.
어드레스 매퍼(29)의 매핑 어드레스 출력(30)은 버퍼 메모리 및/또는 태그 RAM(Tag RAM)(31A-B) 및 에러 캐치 RAM1/2(32A/B)에 대하여 어드레스로서 인가되는 데, 이들은 각각 서로 다른 기능을 수행하지만, 그럼에도 불구하고 일괄하여 내부 테스트 메모리(87)를 구성하는 4개의 메모리 세트 내에서 선택 가능한 부분으로서 구현될 수 있다. 매핑 어드레스 출력(30)은 Addr.비트 선택 회로(37)에 대하여 하나의 입력으로서 인가되는데, 그 Addr.비트 선택 회로(37)의 멀티플렉싱 기능은 이하에서 설명할 것이다. 내부 테스트 메모리는 서로 다른 기능을 위하여 이용되는 다양한 RAM 기반형 메모리 구조의 많은 인스턴스를 포함하도록 구성될 수 있다. 이는 서로 다른 메모리 세트에서 일정한 부분이 그 관련된 목적을 위하여 이용됨을 밝힘으로써 달성된다. 도 2에 도시된 것은 그러한 장치 중 하나이고, 그 장치는 테스트 절차에 따라서 변화될 수 있으며, 이러한 메모리 세트 이용의 전체 동작은 매우 동적인 것으로 생각되어야 한다. 내부 테스트 메모리의 장착물(예컨대, 에러 캐치 RAM(32A-B)) 중 어떤 것도 고정적 하드웨어 장치는 아니다. 4개의 메모리 세트만이 고정적이다. 그러나 그러한 메모리 세트 중 어떠한 부품이 주어진 시간(실제로 하나가 정의되어 있다면)에 에러 캐치 RAM이 되는지는 어떤 구성이 이루어지는지에 의존한다.
버퍼 메모리(31A,31B)를 고려한다. 그 기능은 DUT에 인가될 수 있는 데이터 패턴(33)과 어드레스(34)를 보유하는 것이다. 데이터 패턴(33)과 어드레스(34)는 실제로 그 관련된 버퍼 메모리(이들 버퍼 메모리(31)는 이중 "포트 메모리"는 아니지만, 바람직하게 두 개의 서로 다른 메모리 세트 부분으로 구성됨)로부터 별도의 출력이다. 계속하여, 저장형 데이터(Stored Data)는 하나의 메모리 세트에 저장되고, , 저장형 어드레스(Stored Address)(34)는 다른 메모리 세트에 저장되는 것이 바람직하다. 또한, 버퍼 메모리로의 기록에 대한 명시적 메카니즘을 지금까지 설명하지 않았는데, 이를 달성할 수 있는 한가지 방법은 실행 프로그램의 명령에 따라 테스트 사이트 제어기(4)에 의하여 개시되는 어드레스형 버스 동작에 의한 것이다. 도 2에서 거의 모든 부분에 대하여 "플로어보드 하부(under the floorboards)", 즉 링 버스라고 불리는 "유틸리티 서비스(utility service)"(도면을 매우 복잡하게 하기 때문에 그 대부분을 도시하지 않음)가 존재한다.
에러 캐치 RAM(32A-B)은 버퍼 메모리에 인가되는 동일한 어드레스로 어드레싱되고, 에러에 관한 정보를 저장하거나 또는 검색하는데, 후술할 포스트 디코드 회로와 함께 이 동작을 수행한다. 버퍼 메모리(31A-B)로부터의 경로(33,34)와 같이, 경로(62A-D)(에러 캐치 RAM1(32A)로부터)는 바람직하게, 링 버스(도시되지 않음)로 분배되는 구성 정보에 따라서, (에러 캐치 RAM으로 동작하도록 구성된) 메모리 세트의 일부분으로부터의 멀티플렉스형 출력(MUX'ed output)이다.
데이터 MUX(35)는 ALU의 집합(24)내의 레지스터(DH 및 DL)로부터의 데이터(28)뿐만 아니라 버퍼 메모리(31A)로부터의 저장형 데이터 출력(33)을 입력으로 갖는다. 데이터 MUX(35)는, PGM SRAM(20)에 저장된 값(36)에 따라서, 이들 입력(28,32) 중 어떤 것을 그 출력(38)으로 제공할 것인지 초기 선택을 수행하는데, 후술되는 바와 같이 변형되지 않는다면, 이 출력(38)은 송신 벡터 매퍼/직렬 변환기/수신 벡터 비교 데이터 회로(40)에 대하여 두 벡터 성분 중 하나로서 제공된다(다른 성분은 Addr.비트 선택 회로(37)의 출력(39)이다).
회로(40)는 세 가지 벡터 관련 기능, 즉 벡터 성분(38,39)을 DUT에 인가(송신)될 전체 벡터의 순서화된 논리 표현으로 어셈블링하는 기능과, 송신 벡터 논리 표현의 순서화된 비트와 그 신호(즉, 그 벡터 내 비트)를 대신하여 DUT와 접촉할 핀 전자 장치의 실제 물리 채널 번호(즉, 소정의 프로브 팁) 사이에 임의적인 동적 대응(매핑)을 적용하는 기능과, 컴파일러와 협력하여 전체 논리 벡터를 DUT(이를 허용하는 DUT)에 개별적으로 또한 순서대로 제공될 부분(pieces)으로 분할하는 기능을 수행할 수 있다. 이러한 기능 중 어떤 기능이 수행될 것인지는 SRAM(41)(이는 마이크로 제어기 시퀀서(19)에 의해 페치되는 208비트 명령어에서의 한 필드에 따라서 어드레스됨)으로부터의 제어 신호에 의하여 결정된다.
DUT 디스에이블 논리(DUT Disable Logic)(90) 섹션이 회로(40)에 포함된다. 그 목적은 다양한 조건(일부는 정적이고, 일부는 테스트 결과에 의존할 것이지만, 그 모두가 프로그램적으로 정의되어 있음)에 응답하여 4개의 DUT 중 어느 하나 또는 그 이상의 DUT가 디스에이블 될 것인지는 표시하는 것이다. 이러한 표시는 4개의 신호(DD 0:3(44b)(DUT 0, DUT 1 등에 대한 DUT 디스에이블))에 의하여 전달된다. 회로(40)의 출력은 DUT 디스에이블 신호(44b)와 함께 벡터 FIFO(45)에 인가되는 64비트에 달하는 벡터(44)인데, 벡터 FIFO(45)는 가득 채워지는 경우 VEC_FIFO_FULL 신호(26)(그 의미와 이용은 전술하였음)를 생성한다. 벡터 FIFO(45)의 최상위 벡터는 주기 생성기(Period Generator)(49)(간략히 설명될 것임)에서 발생하는 VEC_FIFO_UNLOAD 신호(47)의 수신시 제거된다. 그 제거된 벡터(46)는 핀 전자 장치(9)의 관련 인스턴스를 통하여 DUT에 연결된 타이밍/포매팅 및 비교 회로(Timing/Formatting & Comparison circuit)(52)로 인가된다. 즉, 핀 전자 장치(9)의 (여러 테스트 사이트 중) 각각의 인스턴스는 관련된 타이밍/포매팅 및 비교 회로(52)로부터 송신 & 수신 벡터(7)와 핀 전자 장치 구성 정보(8)를 수신한다.
타이밍/포매팅 및 비교 회로(52)는 VT 버스(89)에 결합되어 구정 및 제어 정보를 수신한다. 타이밍/포매팅 및 비교 회로(52)는 목적에 의하여 단일 엔티티로 다루어지지만 실제로 8개의 집적 회로임을 상기하기 바란다.
타이밍/포매팅 및 비교 회로(52)는 마이크로 제어기 시퀀서(19)의 프로그램 SRAM(20)과 동일한 명령 어드레스(Instruction Address)(작은 원 내부의 "A")에 의하여 어드레싱되는 내부 SRAM(54)을 갖는다. (외부 DRAM(53)이 내부 SRAM(54)을 대신하여 사용될 수 있으나, 이는 증가형 카운터(incremented counter)(도시되지 않음)에 의하여 지역적으로 어드레싱됨). 내부 SRAM(54)(또는 외부 DRAM(53))은 포맷에 관련된 구동 및 비교 사이클(Drive and Comparison cycle) 생성을 지원한다. 구동 사이클은 RAM(53,54) 중 하나에 의하여 공급되는 사전 선택형 포맷을 이용해서 DUT로 송신 벡터를 인가한다. 비교 사이클은 DUT가 제공하는 벡터를 수신하고 이를 검사하고, 또한 사전 선택형 RAM 공급형 포맷에 따라서, 이전에 제공된 비교 데이터와 매칭하는지를 판정한다. 구동 사이클 및 비교 사이클 양자 모두 그 지속 시간(duration time), 로드(load)가 인가되는지 여부 및 언제 인가되는지, 데이터가 언제 래치(latched)되는지 또는 스트로브(strobed)되는지, 신호가 0으로의 복귀(Return-To-Zero)인지 아닌지, 구동 신호를 그 상보 신호(complement)로 둘러싸는지 여부에 관하여 적절하게 조절 가능하다. (이들 선택 사항은 전술된 다양한 포맷을 갖는다)
타이밍/포매팅 및 비교 회로9523)에 의하여 수행되는 비교는 채널 기초마다(on a per channel basis) 논리 값이 부적당(기능적 에러)하기 때문에 그리고/또는 그 전기 특성이 수용 가능한 한계(파라미터 에러)를 벗어나기 때문에 채널이 고장났는지에 관한 정보를 포함한다. 또한, 다수의 DUT 테스트가 수행되는 경우 어떤 채널이 어떤 DUT에 관련되는지가 알려진다. 이로써 4개의 신호(DFE 0:3)(DUT #기능적 에러)(103) 및 4개의 신호(DPE 0:3)(DUT#파라미터 에러)(104)가 생성된다.
타이밍/포매팅 및 비교 회로(52)에 의하여 수행되는 비교는, 수신 벡터 역매퍼/직병렬 변환기(deserializer)(57)(그 기능은 회로(40)의 논리적 반전이라고 간주할 수 있음)에 인가되는 64비트 값(56)을 생성한다. (회로(57)의 동작은 SRAM(41)에 의한 회로(40)의 제어에 대응하는 SRAM(58)에 의하여 제어된다). 이어서, 회로(57)의 출력(59)이 포스트 디코드 회로(60)로 인가되고, 또한 에러 캐치 RAM(32A)으로 인가된다. 현재는, 포스트 디코드 회로(60)가 프로그램 기준(programmatic criteria)을 통해서 입력되는 에러 정보(59) 및 이전에 에러 캐치 RAM1(32A)에 저장된 에러 정보 양자 모두를 검사하여 압축되고 보다 용이하게 해석 가능한 에러 정보(이는 그 다음 경로(61)를 통해 에러 캐치 RAM2(32B)에 다시 저장될 것임)를 생성할 수 있다고 말할 수 있다. 일예로 특정한 범위의 어드레스 내부에 에러가 몇 차례나 존재하는지에 관한 정보를 생성할 수 있는데, 이 정보는 대체 회로(substitute circuit)를 구동하여 온칩 수리(on-chip repair)를 시도할 시기를 결정하는데 유용할 수 있다.
이제 주기 생성기(49) 및 그 관련 타이밍 SRAM(51)을 설명하겠다. 주기 생성기(49)와 타이밍 SRAM(51)은 마이크로 제어기 시퀀서(19)에 의해 페치되는 각 208비트 명령에 대해 타이밍/포매팅 및 비교 회로(52)의 관련 동작에 관한 지속 시간을 결정하는 8비트 신호 T_SEL(43)에 응답한다. T_SEL(43)은 페치 명령내의 상이한 필드에 의해 표시되는 다양한 제어값 및 명령(Various Control Values & Instruction)(42)의 멤버이다. T_SEL(43)은 8비트 값으로 256개의 서로 다른 경우를 표시하거나 또는 인코딩할 수 있다. 이에, 이들 각 "경우" 그 값은 타이밍 SRAM(51)에 저장된 28비트 값이고 T_SEL에 의해 어드레싱된다. 어드레스되는 각각의 28비트 값(23)은 19.5 피코초(picosecond) 해상도(resolution)로 원하는 지속 시간을 지정한다. 액세스되는 28비트 지속 값(23)의 시퀀스는 그 시퀀스의 개별 멤버가 벡터 FIFO(45)에 저장되어 있는 의도형 대응 벡터의 검색과 동시에 검색 및 인가되도록 주기 FIFO(50)에 저장된다.
FIFO(50)에서 최초 엔트리에서의 거친(coarse) 타이밍 값 필드는 5nsec의 해상도를 갖는 지속 시간 정보를 운반하고, 그로부터 다음 송신 벡터를 벡터 FIFO(45)에서 타이밍/포매팅 및 비교 회로(52)로 전송하는 VEC_FIFO_UNLOAD 신호(47)를 생성한다. 부속 신호 TIMING REMINDER(48)가 또한 회로(52)에 제공되는데, 이 회로(52)에서 최종 19.5 피코초 해상도가 달성된다.
전술한 바는 메모리 테스터의 전체 성격의 서론을 결말 짓는다. 이를 출발점으로 하여 스코프 모드(scope mode) 및 관련 사항을 설명하도록 한다.
도 3을 참조하면, ALU 히스토리 FIFO(69)와 관련 제어회로를 포함하도록 도 2의 블록도(6)의 일부분을 확장한 단순화된 블록도(64)가 도시되어 있다. 하드웨어에 의하여 실행되는 실제 208비트 명령 워드를 저장하는 PGM SRAM으로 인가되는 어드레스(63) 시퀀스를 생성할 책임이 있는 넥스트 어드레스 계산기(102)로 설명을 시작하는 것이 좋겠다. 즉, 넥스트 어드레스 계산기(102)는 다음 명령 워드가 페치될 어드레스를 표시하는 프로그램 포인터(program pointer) 보유 장치(keeper)이다. 새로운 유효 어드레스가 있을 때마다 신호 PGM_STEP(83)이 인가된다.
넥스트 어드레스 계산기(102)는, 실행되는 머신 워드가 관련 플래그(55), 프로그램 제어 변수(25) 등을 허용하는 경우, 시퀀스 어드레스 중 현재 어드레스에 응답함으로써 테스트 프로그램 내에서 분기를 구현한다. 이러한 용량(capacity)에서 중요한 신호 중 하나는 PD_ERROR(90)(포스트 디코드 에러)라 불린다. 이는 도 2의 포스트 디코드 회로(60)에서 시작되며, "MEMORY TESTER WITH ENHANCED POST DECODE"라는 명칭의 참조 출원에서 자세히 설명되고 있다. 이것이 의미하는 바를 간략히 말하면 포스트 디코드가 에러 검출을 위한 소정의 (포스트 디코드 회로(60) 자체 내부에서) 구성 가능한 기준이 만족되었는지 판정한다는 것이다. 현재 관심을 가지는 것은 PD_ERROR(90) 시작에 관련된 프로그램 위치 및 관련 상태 정보를 테스트하는 것이다. 즉, ALU 레지스터 X, Y, 및 Z의 콘텐츠(어드레스), 어쩌면 DH 및 DL 레지스터의 콘텐츠(이들은 결합되어 32비트 데이터를 구성함), 그리고 어쩌면 레지스터 A, B, 및 C의 콘텐츠(이들은 루프 인덱스로 이용되거나 다른 테스트 프로그램 조정을 위하여 이용될 수 있음)를 알 필요가 있다. 일부 실시예에서는 어드레스 레지스터만을 포함하는 것으로 충분할 것이지만, 이와 다른 실시예에서는 ALU 히스토리 FIFO(69)에 포함할 필요가 있는 추가적인 유용한 레지스터들(여기서는 언급되지 않았으나)이 있을 수 있다.
테스트 프로그램이 PD_ERROR 신호를 주기적으로 테스트할 것이며, 때에 따라 프로그램 내의 특정 위치로 JUMP할 것을 요구할 것이다. 그러나 대개 JUMP의 목적지는 실제로 무엇인가를 수행하기 위한 템플릿일 뿐이고, 의도대로 수행되는 JUMP에 있어서 다양한 레지스터의 콘텐츠(히스토리 FIFO에 저장된 것들)가 복구될 필요가 있다. 그러나, JUMP의 목적지는 프로그램 포인터(그 명령이 차후 관심을 갖는 PD_ERROR를 "야기"함)의 실제 값이 아닐 있다. 이러한 이유와 관련하여, 넥스트 어드레스 계산기(102)에 대한 프로그램 포인터의 값은 ALU 히스토리 FIFO에 저장된 아이템 중의 값이 아니라는 점에 주의해야 한다. 마이크로프로세서에서의 문맥 교환과 달리, 테스트 프로그램 위치를 진행되어야 하는 위치로 설정하기 위하여 정규 프로그램형 JUMP에 의존한다. 어쩌면 프로그램 제어에 따라, 어쩌면 자동으로, ALU 히스토리 FIFO는 DUT 어드레스의 문맥과, DUT 데이터와, 그리고 어쩌면 프로그램 루프 제어 인덱스를 복구한다. 이러한 방법에서, ALU 히스토리 FIFO 이벤트의 출력은 그것이 초래한 바로 그 프로그래밍에 의하여 유연하게 지시될 수 있다.
계속하여, PGM SRAM(20)으로부터 페치되는 208비트 명령 워드(65)는, 현재의 목적에 있어서, ALU 동작에 관련되는 ALU INSTRUCTION(22,66)을 표시하는 n비트 부분("테스트 프로그램의 알고리즘 제어")을 포함한다. BEGIN_HIST라고 불리는 1비트 부분(68)이 있는데, 그 의미와 이용이 이하에서 간단히 설명될 것이다. 208비트 중 남아있는 것 모두가 잔여 부분(67)이고, 이는 필요한 어디로도 진행할 수 있다.
ALU INSTRUCTION(22,66)은 ALU 레지스터(71-78) 집합에 적절하게 연결되어 있는 ALU 명령 회로(70) 집합으로 인가된다. 이들은 도 2에 도시된 것과 같은 것으로, 도 3에서 A_ALU 레지스터(71), B_ALU 레지스터(72), C_ALU 레지스터(73), DH_ALU 레지스터(74), DL_ALU 레지스터(75), X_ALU 레지스터(76), Y_ALU 레지스터(77), 그리고 Z_ALU 레지스터(78)라고 명명되어 있다. 간결함을 위하여 도 3에서는 이들 여러 레지스터로의 연결 모두를 도시하지는 않았으며, 도 2에 연결된 것으로 도시된 바와 같이 여전히 연결되어 있음을 알아야 한다. 그러나, 각각의 레지스터는 ALU 히스토리 FIFO(69)의 한 섹션에 관련된 것으로 도시되고 있으며, 사실 ALU 히스토리 FIFO(69)는 열과, 필드 또는 섹션과, 앞서 나열된 8개의 ALU 레지스터 각각에 대한 입력을 8개씩 갖는다는 점에 주의해야 한다. 이들은 일치하여 동작할 것이므로, 이들 FIFO 섹션 각각의 깊이는 서로 모두 동일하다. 85 정도의 깊이가 바람직한데, 이 수는 각각 대략 40의 길이를 가지는 2개의 파이프라인에 대한 길이의 합으로 얻어진 것이다. 바닥에 그려진, 두꺼운 검정색 라인(105)은 8개의 FIFO 섹션의 출력은 전체가 모여서 링 버스(85)를 통하여 시스템 나머지 부분에 대하여 이용 가능(UNLOAD 동작 동안)해진다는 것을 표시하고 있다.
ALU 히스토리 FIFO(69)는 중요한 4개의 제어 신호를 갖는다. 이 중에는 (내부) FIFO 로드 포인터와 (내부) FIFO 언로드 포인터(FIFO Unload Pointer)를 시작 값(starting value)으로 설정하고, 아마도 모든 콘텐츠를 클리어시키는 RESET 신호(79)가 있다. 또한, 8개의 레지스터(71-78)에 관련된 8개의 콘텐츠가 그 각각의 FIFO 섹션으로 로드되고 FIFO 로드 포인터를 전진시키도록 하는 LOAD 신호(81) 가 포함된다. 그리고, 최초 부하값이 FIFO로부터 검출되고 언로드 포인터의 값이 증가되도록 하는 UNLOAD 신호(107)가 있다. 그 검출은 링 버스로 이루어지며, 그로부터 일정한 매개장치를 통해서, 최종, 목적지에 이르게 된다. 링 버스에 직접 부하되는 것과 달리 필요한 경우마다 링 버스를 통하여 그 콘텐츠를 전달할 수 있고 전용 경로를 통하여 적절한 ALU 레지스터로 빠르게 되전송할 수 있는 소정의 전용 홀딩(holding) 레지스터에 저장할 수도 있다. 이러한 장치는, 프로그램 제어 하에서, 중요한 ALU 레지스터 값을 검사하고 복구할 수 있게 한다. UNLOAD는 링 버스의 폭 보다 더 많은 비트를 포함하고 있음에 주의해야 한다. 관련된 전용 홀딩 레지스터로 먼저 UNLOAD한 다음, 홀딩 레지스터의 링 버스로의 전송을 스태거링(staggered)하여 일어나게 함으로써 이러한 상황이 처리될 수 있다. UNLOAD가 엄격하게 수행되어 데이터를 전달하는 경우라면, 관련된 스태거형 전송이 생략될 수 있다.
나머지 FIFO 제어 신호를 FULL(80)인데, 이는 FIFO 내에 로드외지 않은 위치가 없으며, 따라서 임의의 추가적 정보가 있게되면 정보 유실(새로운 정보가 구 정보를 겹쳐 쓸것임)이 발생할 것이라는 것을 나타낸다. 이는 히스토리 FIFO의 목적과 상반되므로, 이를 방지하여야 하고, 파이프라인에 매치되기에 충분할 만큼 FIFO를 깊게 한다. 따라서, FULL 신호는 반전되어 LOAD에 대한 소스 신호(PGM_STEP (83))로 판명됨)와 AND되어, FULL(80)이 TRUE인 경우마다 LOAD(81)이 발생하지 않도록 한다. 그 AND 동작은 AND(82) 수행된다.
한가지 더 예비적 설명을 하고, ALU 히스토리 FIFO 동작을 설명할 것이다. 전술한 바와 같이, 파이프라인 깊이가 항상 고정된 것은 아니며 특정한 요구 각각에 대하여 생성된 메모리 테스터의 동작 구성에 따라서 변화하는데, 그 변화는 테스트 프로그램의 연속 세그먼트 레벨에서 발생할 수 있다. 테스트 프로그램 각각의 세트먼트마다, 테스트 프로그램의 로딩 및 실행에 관련되고 효율적 파이프라인 깊이가 얼마인지 알아내는 수퍼바이저 소프트웨어(이는 그 테스트 프로그램 요구에 따라서 어떠한 구성 변화를 일으키는데 이용되는 유틸리티 집합의 홈(home)이기 때문에 알고있음)에 의하여 수행되는 하우스키핑 기능이 있다. 초기에 그리고 어떠한 변화가 발생한 경우에, 그 수퍼바이저 소프트웨어에 의하여 그 값이 파이프라인 깊이 레지스터(Pipeline Depth Register)(84a)에 배치될 것이다. 신호 BEGIN_HIST(68)가 발생하면 파이프라인 깊이 레지스터(84a)로부터 그 값이 다운 카운터(Down Counter)(100a)로 복사될 수 있다.
BEGIN_HIST(68)는 본질적으로 208비트 명령 워드내의 한 비트 필드로 표시되는 테스트 프로그램에 내장된 플래그이다. 이는 그 플래그가 포함되는 명령 워드 또는 그 다음 명령 워드는, 그 다음으로 ALU 히스토리 FIFO(69)가 후속적 에러 테스트형 플래그 PD_ERROR(90)가 TRUE임을 확인하는 테스트 프로그램 내부 위치임을 의미한다. 이를 해석하는 또 다른 방법은 임의의 이전 히스토리를 끝내고, 새로운 히스토리를 시작하는 것이다. 그에 따라, 테스트 프로그램 내의 이 지점에서 BEGIN_HIST(68)가 어서트(asserted)되고, FIFO(69)는 재설정되고, 다운 카운터(100a)에 레지스터(84a)로부터 효율적 파이프라인 깊이가 로드된다. (또 다른 다운 카운터(100b)는 파이프라인 깊이 레지스터#2 등으로부터 로드된다. 이에 관하여 차후 더 설명한다.)
이제, PGM SRAM(20)으로부터 추가 명령이 페치되고 실행되면, 신호 PGM_STEP(83)으로 대응하는 신호가 있을 것이다. 이들은 FIFO에 대한 LOAD(81)의 대응 인스턴스(FIFO는 당연히 아직 가득 차 있지 않다)와 다운 카운터(100a)를 감소시키는 대응 인스턴스(PGM_STEP(83)은 다운 카운터(100a) 뿐만 아니라 다운 카운터(100b)의 COUNT 터미널로도 신호를 보낸다는 점에 주의해야 한다)를 야기할 것이다. 최종적으로 다운 카운터(100a)에서의 카운트가 0에 도달할 것이며, 이는 그 다운 카운터(100a)에 연결된 카운트#1 = 0 회로(101)로부터의 출력으로써 표시될 것이다. 이 상태는 효율적 파이프라인 깊이에 도달했으며, 이제 FIFO(69)내의 전체 엔트리 수를 증가시키는 것을 중단하고 FIFO 이용 깊이를 일정하게 유지하기 시작해야 한다는 것을 의미한다. 이로써, PD_ERROR가 나타나면 FIFO의 끝 "FO"에서 원하는 정보를 얻게된다.
PD_ERROR(90)의 인스턴스가 아직 나타나지 않았다면, 새로운 값을 로드할 때마다 매번 FIFO를 한번씩 언로드하는 것이 안전하다(다양한 값의 집합이 히스토리 FIFO의 끝 "FO"를 차지할 것이다). 이는 BEGIN_HIST 신호가 그 이전에 있었음을 의미하거나, 그렇지 않다면 아마도 PD_ERROR가 아직 발생하지 않았음을 의미한다(사실, 어느 하나도 일어나지 않을 수도 있다). LOAD/UNLOAD 동작은 FIFO가 어떠한 경우라도 가득 차지 않도록 할 것이다. 여기서 잠시 본론에서 벗어나, UNLOAD(107)이 어떻게 발생되는가를 설명할 것이다.
링 버스(85)를 통하여 설정된 수 있는 1비트 히스토리 모드 래치(one-bit History Mode Latch)(105)가 존재한다. 이는 설명중인 히스토리 FIFO 스터프 모두를 인에이블시키도록 요구하는 것을 의미한다. ALU 히스토리 모드 래치(105)는 신호 BEGIN_HIST(83)에 의하여 역시 재설정되는 설정/재설정 래치(98)에 관련된다. ALU 히스토리 모드 래치(105)가 설정될 때마다 신호 PD_ERROR(90)이 래치(98)를 설정한다. 이는 AND 게이트(86)에 의하여 이루어진다.
다시 본론으로 돌아가서, PD_ERROR의 인스턴스는 아직 발생하지 않았고, 또한, FIFO(69)가 현재 효율적 깊이의 파이프라인으로 신장하고 있음을 카운트#1 = 0 회로(101a)가 표시하는 동안 새로운 명령 페치(PGM_STEP(83)의 인스턴스)가 존재할 때마다 매번 FIFO(69)가 UNLOAD된다. 그러한 인스턴스가 결코 존재하지 않을 수도 있으나, 결국 그러한 경우가 발생한다고 가정하기로 한다. 여기서 래치(98)의 출력 Q가 설정(그 신호의 이름은 FREEZE_HIST(99)임)되고, AND 게이트(106)의 입력단에서 반전되어 어떠한 추가 UNLOAD 신호(107) 생성도 발생하지 않도록 한다. 관심 값이 레지스터(71-78)에 트랩되고, 이는 다음 UNLOAD를 수행할 때(아마도 일정한 소프트웨어가 이에 도달하는 경우일 것임) 얻을 수 있을 것이다. 여기에서 LOAD를 디스에이블하는 것도 바람직하지 않은지 의문을 가질 수도 있다. 신호 FULL(80)이 LOAD 생성을 디스에이블 하는 동안, AND 게이트(82)에 의하여 무엇이 이루어지는지 실제로 문제되지 않는다면 그렇게 할 수도 있을 것이다.
카운트#1 = 0이전에 PD_ERROR가 발생하는 경우 어떻게 될 것인가 의문을 가질 수도 있다. 이것은 실제로 좋은 질문이다. 간단히 답을 하면, 이런 일은 결코 발생하지 않는다고 할 수 있다. 이런 일이 발생한다면, 테스트 프로그램에서BEGIN_HIST의 인스턴스(이것은 테스트 프로그램에서 시작한다는 점을 기억해야 한다)를 이용하는 방법에 있어서 PD_ERROR(90)을 생성(또는 어쩌면 재설정)하도록 히스토리 모드 래치(105)를 설정하고 포스트 디코드 회로(60)를 구성하는 것과 관련하여 일정한 부주의가 있었음을 의미하는 것이다. 이런 상황은 괄호 표현의 중첩이 허용되지 않는 시스템에서 컴파일러가 매치되지 않는 괄호를 발견하는 것과 다소 유사하다. (결국, 히스토리 FIFO 세트 하나만 존재한다.)
이전의 기존 프로그램 위치와 에러 플래그의 상태를 상관시키는 이와 같은 ALU 히스토리 FIFO 메카니즘을 가지므로, 처음에 의도된 것과 다른 추가적 목적에 이용하기 원하게 된다. 그 과정을 살펴보면, "이러한 좋은 메카니즘이 단지 PD_ERROR에 있어서 ALU 상태를 복구하는데 제한되는 이유는 무엇인가? ALU 히스토리 FIFO는 파이프라인에 적절한 지연을 포함하는데, 관련 명령이 페치되고 실행된 다음 파이프라인 지연을 이용하여 에러 신호나 플래그의 값을 발생시(또는 심지어 그 이후에) 정확히(accurately) 테스트하는 방법은 없는가? 전에 어떠했는지는 이미 알고 있다."고 말할 것이다. 문맥에서, "정확히"가 의미하는 것은 발생하는 에러 신호나 플래그에 너무 빨리 응답하지 않는다는 것, 즉, 명령이전에 몇 사이클 동안 무엇인가 관심을 갖는 것이 수행되어야 한다는 것을 의미한다. 이에 대한 답은 "할 수 있다"이다.
관심을 갖는 에러 신호나 플래그는, FERR(113)(기능적 ERRor가 있었음을 의미함)과, PERR(114)(파라미터 ERRor가 있었음을 의미함)과, (다시 한번) PD_ERROR(90)이다. 이들 신호 중 처음 둘을 생성하는 방법에 관한 정확한 설명은 참조되는 MEMORY TESTER TESTS MULTIPLE DUT'S PER TEST SITE에 설명되고 있다. 그 출원의 도 5를 참조하면, DUT마다 기능적 에러 및 파라미터 에러 신호가 어떻게 발생하는지 알 수 있다. 그 출원의 도 6을 참조하면, 시스템이 DUT 신호마다 관련되는 성분 사이에서 가능한 다양한 조합을 나타낼 수 있는 YDFE(Yes DUT Functional Error) 및 YDPE(Yes DUT Parametirc Error)를 생성하도록 어떻게 구성 가능한지를 알 수 있다. 여기서, 그 YDPE는 본 명세서의 FERR과 동일하고, YDPE는 PERR과 동일하다.
FERR 및 PERR은 대개 그 외관에 관련된 동일한 파이프라인 지연을 가지지만, PD_ERROR에 있어서는 아마도 상당히 다를 수 있다. 어떠한 경우에도, 파이프라인 깊이 레지스터#2(84b)는 FERR 및 PERR에 대한 적절한 값으로 미리 설정될 것이며, 반면 파이프라인 지연 레지스터#1(84a)은 PD_ERROR에 대한 적절한 값으로 미리 설정될 것이다.
이제, 테스트 프로그램 내의 조성의 단계에서 전술된 신호 중 하나를 야기할 수 있는 자극이 이루어진다. 동일한 단계에서, 테스트 프로그램은 BEGIN_HIST(68)을 발행(issue)한다. 이는 다운 카운터(100b)에 파이프라인 깊이를 로드하는데, 다운 카운터(100b)는 프로그램 내의 추가적 단계(PGM_STEP(83)의 연속 인스턴스)에 의하여 카운트 다운된다. 최종적으로 COUNT#2 = 0(115)이 TRUE가 될 것이며, 이로써 두 개의 MUX(110,111)에 의하여 이루어지는 선택이 판정된다는 것을 알아야 한다. MUX(109)는 신호 COUNT#1 = 0(108)에 의하여 제어된다.
FERR(113)과 그 MUX(111)을 예로서 선택하기로 하고, 나머지는 동작 방식에 있어서 동일하다. COUNT#2 =0이 FALSE인 동안 MUX(111)은 신호 <NO_ERROR>(116)(에러가 없을 때 테스트 시스템에 의하여 관련되는 전기적 값)를 그 출력(3비트 집합 중 한 비트로서, 뒤이은 분기를 위하여 넥스트 어드레스 계산기로 전송됨)으로서 선택한다. 그러나, 파이프라인 지연이 끝나면, 실제 FERR(133)이 무엇인지 구하여야 한다. COUNT#2 = 0이 TRUE가 되기 때문에, MUX(111)가 넥스트 어드레스 계산기(102)로 전송될 FERR을 지금 선택하도록 한다.
PERR에서의 분기는, MUX(110)을 대신 이용하는 점을 제외하고는, FERR에 있어서와 같이 동작한다. PD_ERROR(90)에서의 이러한 분기 스타일은, "공유형" 다운 카운터#1(100a)에 의하여 구동되는 신호 COUNT#1 = 0(108)에 의하여 그 MUX(109)를 제어하지 않는 ALU 히스토리 FIFO(파이프라인 깊이 레지스터#1(84a))에 대한 지연을 공유하는 점을 제외하고는, 다른 둘과 같이 동작한다.
분명히, 테스트 프로그램은 예컨대, 고정된 충분한 지연의 루프(a loop of fixed but sufficient delay) 등을 올바르게 이용하도록 작성되어야 한다. 그러나 최소한 그 대응이 올바른 것이라는 점을 보장할 수 있어야 한다. 어떠한 방해 원인도 발생하지 않고 이 신호들을 스스로 설정하지 않는다고 보장한다면, 파이프라인 지연이 만료된 한참 후에도 테스트 할 수 있다.
그 밖의 유용한 히스토리 FIFO가 있으며, 도 4의 단순한 블록도(117)에 도시되어 있다. 일반적으로, 이는 메모리 테스터 구조에서 서로 다른 부품에 배치되고, ALU 히스토리 FIFO에 의하여 저장된 것과는 다른 정보를 저장한다는 점을 제외하고는, ALU 히스토리 FIFO(69)와 유사한 방식으로 작동할 것이다. 최근 비교 에 러 데이터를 기록하는 하나의 FIFO는 단지 한 레벨 깊이여야 하므로, 본격적 FIFO라기 보다는 단순한 레지스터가 되어야 한다. ECR 히스토리를 복원하기 위한 두 섹션 FIFO와 공동으로 제어되는 버퍼 메모리 히스토리를 복원하는 또 다른 두 섹션으로 구성된 FIFO가 하나 있다.
도 4를 참조하면, 좌측 부분에서 시작하는 것이 쉽다. 포스트 디코드 회로(60)의 부품이 도시되어 있으며, 이는 도 2에 도시된 것과 동일한 것으로, 수신 벡터 역매퍼/직병렬 변환기 회로(57)로부터 32비트의 비교 데이터(59)를 수신한다는 점에 주의해야 한다. 이에 한가지를 덧붙이면, 그 32비트는 DATA_VALID 신호(118)와 함께 송신된다는 점이다.
포스트 디코드로부터 유래한 32비트의 (처리된) 에러 데이터 및 DELAYUED_DATA_VALID(128)(묶어서(61))는 ECR(32B)(도 2 참조)로 전송될 것이다. 또한 포스트 디코드는 PD_ERROR(90)를 시발한다는 점에 주의해야 하며, 도 3에서 FREEZE_HIST(99)를 생성하기 위하여 BEGIN_HIST(83)과 함께 어떻게 이용되는지를 기억하기 바란다.
PD_ERROR를 야기한 에러 데이터(66)를 트랩하는 작업은 비교적 수월한 일이다. 보통, FREEZE_HIST(99)는 FALSE이고, AND 게이트(129)의 입력단에서 반전되어 DELAYED_DATA_VALID(128)가 Last_Error_Data 레지스터(132)의 LOAD 제어 입력으로 결합된 신호(131)를 생성하도록 신호(131)를 생성하게 한다. 이 레지스터로의 데이터 입력은 ECR2로 전송되는 정확히 32비트의 에러 데이터이고, 그러므로 그러한 데이터가 전송될 때마다 캡쳐된다. PD_ERROR은 FREEZE_HIST(99)를 야기하고, FREEZE_HIST(99)는 차례로 신호(131) 및 레지스터(132)로의 어떠한 추가적 로드도 방지한다. Last_Error_Data 레지스터(132)는 링 버스(85)에 결합되므로, 그 콘텐츠를 조사할 수 있다.
히스토리 FIFO가 버퍼 메모리 이용에 관련된다고 가정하기로 한다. 버퍼 메모리(31A,31B)는 여러 목적, 예를 들면 ROM의 예상 콘텐츠 저장하는 동작이나, 인가된 어드레스 시퀀스를 다른 시퀀스로 변환하는 동작 등을 위하여 이용될 수 있다. 어떠한 경우에도, 일단 로드된 버퍼 메모리는 어드레스 매퍼(29)에 의하여 어드레싱되는데, 어드레스 매퍼(29)는 ALU에 의하여 생성되는 X, Y, 및 Z 어드레스(27)에 의하여 구동된다. 각 버퍼 메모리마다 하나씩, 두 개의 버퍼 메모리 히스토리 FIFO(124,125)가 있다. 이는 PD_ERROR(90)의 생성에 관련되는 정확한 파이프라인 지연형 버퍼 메모리 콘텐츠를 제공하는 것을 책임진다. 이들 두 FIFO는, 버퍼 메모리(31A)에 관련된 버퍼 메모리 #1 히스토리 FIFO(124)와, 버퍼 메모리(31B)에 관련된 버퍼 메모리 #2 히스토리 FIFO(125)이다. 이들 두 버퍼 메모리 히스토리 FIFO는 각각 동일한 깊이(4가 적당함)이고, 함께 제어되며, 링 버스에 연결(ALU 히스토리 FIFO를 링 버스로 연결하는 것과 같이, 직접적으로 연결되거나 또는 매개 레지스터를 통하여 연결됨)된다. 이들은 ECR 히스토리 FIFO(126,127)를 포함하는 대규모 히스토리 FIFO 메카니즘의 일부이며, 버퍼 메모리 히스토리 FIFO에 대하여 설명한 다음 이를 논의할 것이다.
그러나 먼저, 설명에 들어가기 전에 사전 정보가 몇 가지 필요하다. 4개의 FIFO(133-136)에서, 그 출력은 도 2의 출력(62A-D)임을 주의해야 한다. 도 2와 같 이, 이들 출력은 포스트 디코드 회로(60)로 연결되지만, 버퍼 메모리 FIFO(133,134)에 대한 입력은 또한 STORED DATA(33) 및 STORED ADDRESSES(34)로서 ALU-to-DUT(송신 벡터) 파이프라인의 일부인 회로(35,37)로 전송된다는 점을 알아야 한다(도 2 참조). 버퍼 메모리를 위한 FIFO(133,134)는 상당히 깊고, 예컨대 30정도인데, 실제 깊이는 이용시 구성 가능하고, 그 존재 이유를 아는 것이 도움이 된다는 점을 제외하고는 본질적으로 주요 관심사가 아니다. 사실, 그 FIFO는 어떠한 버퍼 메모리 히스토리 FIFO도 없는 경우에도 존재할 것이다. 그 이유는 버퍼 메모리가 이용되는 방법에서 알 수 있다. 버퍼 메모리는 만약 이들이 없었다면 ALU에서 유래하였을 정보의 대체적 소스가 되고, 그 콘텐츠(33,34) 사본 하나를 ALU-to-DUT 파이프라인에 적용한다. 그러나, 또 다른 사본이 포스트 디코드로 전송될 수 있다. 다른 사본이 훨씬 먼저(즉, DUT로부터 비교 데이터(59)가 다시 되돌아오기 훨씬 이전에) 도달한다면 적절하지 않을 것이며, 따라서 FIFO(133,134)가 필요한 지연을 제공하여 동시에 도달하는 사본이 실제로 서로 대응하도록 한다. 이런 목적으로 그 깊이가 약 30에 이르는 것이다.
버퍼 메모리 히스토리 FIFO(124,125)에 관하여 설명하기로 한다. 많은 동작 특성은 ALU 히스토리 FIFO(69)와 동일하다. BEGIN_HIST 신호(68)에 의하여 재설정되고, 새로운 값이 존재하고 FIFO에 입력되어야 한다는 것을 나타내는 신호(DATA_VALID(118))를 어서트하고, 이를 not FULL(신호 121) 조건과 AND시킴(AND 게이트(119))으로써 LOAD된다. 이 FIFO는 DATA_VALID(DELAYED_DATA_VALID(182))의 지연 버전에 맞추어 UNLOAD된 상태이다. DATA_VALID의 두 버전간 시간 지연은 본질적으로 에러가 있는지 여부를 포스트 디코드가 판정하는데 필요한 시간이다. 아무 에러도 없는 경우, FIFO에 UNLOAD하기 원하겠지만, 발견하기까지 단지 기다려야만 한다.
FIFO 특성의 차이는 FIFO내에서 데이터 제거를 초래할 이벤트(PD_ERROR(90)의 발생)(이를 보유하는 이유임)가 본질적으로 (파이프라인 지연에 의하여 분리되지 않는다면) FIFO를 통과하는 데이터와 동시에 발생한다는 점이다. 그러므로, 파이프라인 깊이 레지스터나, 다운 카운터 등의 지원을 필요로 하지 않는다. FREEZE_HIST(99)(이는 실제로 히스토리 모드 래치(105)로 한정된 PD_ERROR임) 동안 UNLOAD를 중단하는 것으로 충분하다. 따라서, UNLOAD(122)가 AND 게이트(130)(그 입력은 DELAYED_DATA_VALID(182)와 FREEZE_HIST(99)의 반전된 인스턴스임)에 의하여 발생된다.
ECR 히스토리 FIFO(126,127)의 동작은 제어 신호가 영향을 미치는 한 동일하다. ECR이 이용되는 방법에 관하여 알면 설명된 방법이 유용한 이유를 알게 될 것이다. 도 2에는, DUT에 대한 현재 테스트로부터의 실제 데이터가 ECR로 직접 전달되도록 하는 포스트 디코드 우회 바이패스(bypass)(59)가 존재한다는 점을 주의해야 한다. 나중에, ECR에 저장된 데이터는, 여러 분석을 수행하기 위하여 다시 포스트 디코드로 인가되고 판독될 수 있다. 이제 "어떤 데이터가 PD_ERROR를 야기한 포스트 디코더로 들어가는가?"가 문제이다. 이는 ECR 히스토리 FIFO에서 답을 구할 수 있다. FIFO(135,136)은 "지역적"이고 대규모 파이프라인의 나머지 대부분이 이용되지 않기 때문에, 이 처리 과정 동안 FIFO(135,136)는 얕을 수 있다.