모든 이야기

Lockup latch: 느린 scan clock에서도 비트가 미끄러지는 이유

scan shift에서 비트가 한 칸 이동해야 하는데 두 칸을 지나간 것처럼 보일 수 있다. 같은 이름의 테스트 클럭을 써도 각 cell에 도착하는 시각이 같지는 않기 때문이다. Lockup latch는 특정 scan 연결에서 이전 데이터를 잠시 유지해, 수신 cell이 새 데이터를 너무 일찍 잡는 문제를 줄이는 역할을 한다.

느린 shift clock도 최소 지연을 보장하지 않는다

상승 에지형 scan cell A→B를 연결한 가상 회로를 보자. A의 클럭은 0ns, B의 같은 순번 에지는 1.2ns에 도착한다. A의 최소 clock-to-Q는 0.2ns, 연결의 최소 지연은 0.2ns라고 하자. A의 새 값은 B 입력에 0.4ns에 도착한다.

B가 1.2ns에 이전 A 값을 잡아야 한다면, 입력은 B 에지 이후의 hold 시간까지 이전 값이어야 한다. hold가 0.1ns면 새 값의 가장 빠른 도착은 1.3ns 이후여야 하지만 실제는 0.4ns다. hold 여유는 0.4−1.3=−0.9ns다. 새 값이 setup 시간보다도 일찍 도착하면 B가 안정적으로 잘못된 순번의 값을 잡을 수 있다. 이 실패를 언제나 metastability로만 설명할 필요는 없다.

테스트 주기를 10ns에서 100ns로 늘려도, 같은 순번 에지 사이의 1.2ns skew와 0.4ns 데이터 도착이 그대로라면 이 hold 문제는 사라지지 않는다. 다음 에지까지 기다릴 시간이 길어지는 것과, 현재 에지 주변에서 이전 데이터가 유지되는 것은 다르다.

Auburn의 scan 연결 설명도 짧은 데이터 경로와 clock skew가 이전 값 대신 새 값을 전달할 수 있음을 다루고, 이를 위해 transparent latch를 사용하는 예를 제시한다. Scan Chain with Mixed Edge-Triggered Flip-Flops, 6–7쪽

필요한 구간에 닫히는 latch를 넣는다

앞의 가상 회로에서 A 뒤에 low-level transparent latch를 넣고 A의 클럭으로 제어하자. A 클럭은 0–5ns에 high, 5–10ns에 low다. latch는 0ns에 닫혀 이전 A 값을 유지하고, A가 0.2ns에 갱신돼도 그 값은 아직 출력으로 통과하지 못한다. 여기서는 latch의 입력 타이밍과 닫힘 조건이 만족됐다고 가정한다.

latch가 5ns에 열리고 propagation delay가 0.2ns, 이후 배선 최소 지연이 0.2ns라면 새 값이 B에 도착하는 시각은 5.4ns다. B의 1.2ns 에지와 0.1ns hold 끝인 1.3ns를 지난 뒤이므로 이 예제의 hold 여유는 4.1ns다. B는 해당 shift에서 이전 A 값을 받고, 새 값은 다음 순번을 위해 대기한다.

다음 B 에지가 11.2ns이고 setup이 0.3ns라면 입력은 10.9ns까지 도착해야 한다. 새 값의 가장 늦은 도착도 5.4ns라고 놓은 단순 모델에서는 setup 여유가 5.5ns다. 실제로는 최소 지연을 hold에, 최대 지연을 setup에 사용해야 한다. 같은 5.4ns를 두 계산에 사용한 것은 이 예제에서 지연 변동을 생략했기 때문이다.

latch 하나가 모든 클럭 관계를 해결하지 않는다

B의 해당 에지가 1.2ns가 아니라 6ns로 밀렸다고 가정하면 새 데이터는 이미 5.4ns에 도착해 있다. hold의 숫자가 작아 보이는지와 관계없이 B는 의도한 이전 값 대신 새 값을 받을 수 있다. latch가 열리는 시각에 비해 수신 에지가 지나치게 늦으면, 보호하려던 구간을 벗어나는 것이다.

따라서 ‘반 주기 지연을 넣었다’는 설명은 클럭 파형과 에지 순서가 정해져 있을 때 읽어야 한다. rising cell과 falling cell, 서로 다른 duty cycle과 클럭 그룹에 따라 적절한 latch 극성과 연결 순서가 달라질 수 있다. 실제 셀의 latch setup·hold, 펄스 폭, 변동 조건도 포함해야 한다.

Lockup latch를 임의의 비동기 클럭 사이에서 모든 데이터 전달을 보장하는 장치로 보아서도 안 된다. 테스트 중에 정한 클럭 관계에서 scan 데이터의 순서를 유지하는 역할과, 자유롭게 움직이는 클럭 사이의 기능 데이터 전달은 다른 문제다. 기능 경로의 상태를 새로 저장하거나 논리를 바꾸는 용도로 연결하지도 않는다.

Lockup latch의 효과는 cell을 추가했다는 사실보다 닫히는 구간에 있다. 송신 데이터의 최소 도착, 수신 에지, latch가 여는 시각과 다음 setup을 같은 시간축에 놓으면, 어떤 shift 조건을 보호했고 어느 조건까지 다시 확인해야 하는지가 분명해진다.