모든 이야기

false path로 없앤 위반에는 제외 근거가 남아야 한다

타이밍 보고서에서 가장 느린 경로가 사라졌다. 배선도 셀도 그대로인데 slack이 좋아졌다면, 먼저 경로를 제외한 제약을 읽어야 한다. false path는 분석할 필요가 없는 경로를 지정하는 수단이다. 그 경로에 해당 타이밍 검사가 필요 없다는 판단은 명령을 쓰기 전에 성립해야 한다.

연결이 있다는 사실과 사용할 수 있다는 사실

정적 타이밍 분석은 레지스터와 조합 논리를 따라 데이터가 전달되는 시간을 계산한다. 구조상 연결된 경로를 모두 살피면 실제 운용에서는 선택되지 않는 가지도 후보에 들어갈 수 있다. 제외가 필요한 이유가 여기에 있다. OpenSTA의 set_false_path는 시작점·경유점·끝점으로 지정한 경로의 타이밍 검사를 끄며, setup과 hold를 구분해 적용할 수도 있다. OpenSTA의 경로 제외 명령

가상 회로에서 출력 레지스터의 입력은 test_mode ? test_result : normal_result다. 정상 운용에서는 test_mode=0이고, 테스트 모드에서는 1이다. test_result를 만드는 계산이 오래 걸려도 정상 운용의 출력은 normal_result에서 온다. 따라서 정상 운용만 분석하는 시나리오에서는 테스트 데이터 가지가 사용되지 않는다는 근거가 있다.

하지만 회로 전체에서 그 가지가 영원히 쓸모없다는 뜻은 아니다. 테스트 모드에도 출력 레지스터를 실제로 캡처한다면 그 모드의 주기와 캡처 요구를 별도로 분석해야 한다. 한 시나리오의 제외 근거를 모든 모드에 복사하면 실제 필요한 검사가 사라진다.

숫자로 차이를 보자. 테스트 모드의 클록 주기가 5ns, 목적 레지스터 setup이 0.2ns, 출발 에지부터 데이터 도착까지의 최대 시간이 7ns라고 가정한다. 클록 차이와 불확실성은 일단 0으로 놓는다. 필요한 도착 시각은 4.8ns여서 slack은 4.8 − 7 = −2.2ns다. 이 경로를 제외하면 위반이 보고되지 않지만, 5ns 에지에서 테스트 결과를 받는 요구는 여전히 충족하지 못한다. 계산을 느리게 받아도 되는 테스트 절차가 있다면 그 절차에 맞는 캡처 시점부터 정의해야 한다.

제외 근거를 모드에 붙여 두기

고정 모드가 근거라면 그 값을 분석에 직접 전달하는 편이 설명하기 쉽다. 예를 들어 정상 운용의 test_mode=0을 표현하는 명령은 다음과 같다.

set_case_analysis 0 [get_ports test_mode]

OpenSTA는 이 값에서 시작한 상수를 아래 논리로 전파한다. 선택되지 않는 가지를 식별할 수 있는 범위가 생긴다. 다만 명령이 실제 핀을 0으로 묶어 주지는 않는다. 외부 설정, 리셋 후 제어와 모드 변경 절차가 이 전제를 지켜야 한다. 상수 모드의 분석 의미

다른 유형의 제외는 경로를 활성화하는 조건들이 동시에 성립할 수 없다는 데서 나온다. 1비트 입력 x가 첫 mux에서는 sel=0일 때만 통과하고, 그 출력이 두 번째 mux에서는 같은 sel=1일 때만 통과한다고 하자. 첫 mux의 다른 입력과 두 번째 mux의 다른 입력은 모두 0이다.

assign mid = sel ? 1'b0 : x;
assign out = sel ? mid : 1'b0;

sel=0이면 mid=x지만 out=0이다. sel=1이면 mid=0이고 out도 0이다. 고정된 두 논리값에서 out은 x와 무관하다. 구조를 그대로 그리면 x부터 mux 두 개를 지나 out까지 연결이 보이지만, 그 데이터를 끝까지 선택하는 고정 sel은 없다. 실제 합성에서는 상수 출력으로 제거될 수도 있으므로, 남아 있는 최종 netlist를 기준으로 판단해야 한다.

이 진리표만으로 sel이 움직이는 순간의 글리치까지 없다고 증명한 것은 아니다. 서로 다른 분기의 전파 지연 때문에 잠시 생기는 변화를 캡처할 수 있는 운용이라면 정적인 조건 배타성만으로 제외하면 부족하다. 모드가 언제 바뀌며 언제 출력이 관측되는지가 제외 근거에 포함돼야 한다.

지운 경로에도 설명이 남아야 한다

예외의 시작점과 끝점을 넓게 잡으면 근거가 있는 가지뿐 아니라 정상 데이터 경로도 함께 빠질 수 있다. 동일한 출발 레지스터가 테스트 계산과 정상 계산을 모두 구동한다면, 출발 레지스터 전체에서 출력 레지스터 전체까지의 제외는 특히 주의해야 한다. 필요한 경유점과 모드 범위를 좁히고, 도구가 실제로 선택한 객체 목록을 확인해야 한다.

제외한 경로에는 적용 모드, 데이터가 전달되지 않는 이유, 리셋과 전환 구간의 조건을 남긴다. 반대로 예외를 잠시 제거했을 때 어떤 경로가 다시 나타나는지도 유용한 검토 자료다. 이는 실제 도구를 실행한 결과가 아니라 예외 검토에서 확인할 항목이다.

느린 경로가 없어졌다는 보고만으로 설계의 성공 여부를 정할 수는 없다. test_mode=0인 정상 동작과 test_mode=1에서 5ns에 캡처하는 동작은 서로 다른 판단을 요구한다. false path를 승인하는 기준은 음수 slack의 크기가 아니라, 제외한 데이터 전달이 허용된 운용에서 필요 없다는 근거다.