Scan chain balancing: 같은 비트 수인데 테스트 시간이 달라지는 이유
1,001개의 scan flip-flop을 네 개의 chain에 나눴는데 테스트 시간이 예상보다 길다고 하자. 총비트 수가 줄지 않았더라도 병렬로 움직이는 chain의 길이에 따라 shift 시간은 달라진다. Scan chain balancing에서는 평균 길이보다 가장 긴 chain이 얼마나 남았는지를 먼저 볼 필요가 있다.
네 줄이 함께 움직이면 긴 줄을 기다린다
가상의 압축 없는 인터페이스에서 네 chain을 같은 shift clock으로 동시에 구동하고 각 chain에 독립 SI·SO가 있다고 하자. 길이가 400·200·200·201이면 전체 비트는 1,001개지만, 한 패턴을 채우고 배출하는 데 기준이 되는 shift 횟수는 400이다. 짧은 chain이 먼저 끝나도 긴 chain은 아직 움직여야 한다.
모든 cell을 자유롭게 분배할 수 있다면 251·250·250·250으로 나눌 수 있다. 길이 합은 그대로이고 최대 길이만 400에서 251로 줄어든다. 이상적인 길이 하한은 ceil(1001/4)=251이다. 이는 이 가정에서의 비트 분배 하한이지 물리적 배선과 클럭 제약까지 포함한 최적해는 아니다.
패턴 500개, 패턴마다 capture 1회, shift와 capture를 모두 10MHz의 한 주기로 계산하자. 다음 패턴의 입력과 이전 응답의 출력을 겹쳐 shift하며, 초기 입력 L회와 마지막 출력 L회도 포함하면 총 주기는 (500+1)L+500이다.
L=400이면 200,900주기, 20.09ms다. L=251이면 126,251주기, 12.6251ms다. 같은 500개 패턴에서도 shift 길이의 균형으로 약 37.2% 줄었다. 단일 chain L=1,001과 같은 가정을 적용하면 502,001주기, 50.2001ms다. 실제 capture가 다른 속도라면 shift와 capture의 시간 항을 나눠 계산해야 한다.
자유롭게 나눌 수 없는 조건이 생긴다
이제 900개는 클럭 A, 101개는 클럭 B를 쓰고 서로 섞지 않는다고 하자. 두 클럭 그룹에 두 chain씩 배정하면 A는 450·450, B는 51·50이 되고 최대 길이는 450이다. 전체 네 chain의 평균은 여전히 약 250이지만 그 평균에 맞춰 나누는 것은 이 제약에서 허용되지 않는다.
chain 개수와 길이 설정의 의미도 도구마다 확인해야 한다. OpenROAD의 DFT 문서는 no_mix가 클럭과 에지 종류를 구분하며 불균형을 만들 수 있음을 설명한다. 또한 이 모드의 max_chains는 clock-edge pair마다 적용되는 최대 개수이고, 개수 제한은 길이 제한보다 우선한다. OpenROAD DFT 설정
따라서 옵션 이름에 ‘4’를 넣었다고 칩 전체에 정확히 네 chain이 생긴다고 가정하지 않는다. 설정된 클럭 그룹과 실제 보고서를 확인해야 한다. 길이 하한과 목표 길이를 계산했더라도 선택한 개수 제한으로 달성할 수 없는지 살펴야 한다.
비트의 균형과 배선의 균형은 다르다
각 chain을 같은 길이로 만들더라도 서로 먼 cell을 잇는 순서라면 긴 배선이 생길 수 있다. chain 길이는 같고 연결 순서만 달라져도 shift 타이밍과 배선 부담이 달라진다. OpenROAD는 cell 교체, chain 계획의 보고, 배치 이후의 실제 연결을 구분한다. 현재 문서의 scan_opt는 구현되지 않은 no-op이므로 명령 호출 자체를 추가 최적화의 증거로 사용할 수 없다.
입출력 채널도 자원이다. 앞의 네 chain 예제는 독립 입력 네 개와 출력 네 개를 가정했다. 실제 압축기나 멀티플렉서가 있으면 내부 chain 수와 외부 핀 수가 일대일로 같지 않을 수 있다. 병렬화로 얻을 수 있는 시간을 논하려면 어떤 채널이 동시에 움직이는지도 정해야 한다.
또한 병렬 활성화로 전류가 달라져 shift clock을 낮춰야 한다면 주기 수의 감소가 그대로 시간 감소가 되지는 않는다. 이 글의 수치는 동일 클럭과 동일 패턴 수에서의 계산이다. 실제 테스트 시간에는 모드 전환과 장비 동작, 필요한 추가 패턴도 포함된다.
Scan chain balancing은 비트를 고르게 나누는 데서 시작하지만 결과는 가장 긴 허용 chain과 실제 연결을 보고 판단한다. 총비트 수, 클럭 그룹, 병렬 채널, 최대 길이를 함께 정하면 평균 숫자에 가려진 대기 시간을 계산할 수 있다.