Altifigence Academy

5 / 20 · 개념

한 상승 에지의 계약

클록 번호, 등록된 전달, 누산과 초기화 우선순위를 고정합니다.

이 과정 전체의 시간 기준

리셋과 clear가 완료된 상태에서 첫 데이터가 소비되는 상승 에지를 E0이라고 부릅니다. t는 E_t의 번호이며, 입력은 해당 에지 바로 전에 안정되어 있습니다. E_t에서 PE는 에지 전 입력으로 곱과 누산을 수행하고, 같은 에지에서 입력을 오른쪽·아래쪽 출력 레지스터에 저장합니다. 갱신된 누산기와 출력은 E_t 직후에 관측합니다. 이웃 PE가 그 출력으로 계산하는 시점은 E_(t+1)입니다. 별도 입력 레지스터, 파이프라인 곱셈기 또는 결과 직렬화 지연은 이 기본 모델에 포함하지 않습니다.

따라서 '에지 0에서 5가 계산됨'은 E0 직후 acc=5라는 뜻입니다. 초기화 에지는 E0에 포함하지 않습니다. 코드에서 clear와 첫 MAC을 같은 에지에 걸면 이 과정의 우선순위에서는 clear가 이기고 첫 항이 버려집니다. 작업 제어기는 먼저 clear를 한 번 수행한 뒤 다음 에지부터 데이터 공급을 시작해야 합니다.

PE 내부의 두 역할

PE는 자기 결과를 누산하는 동시에 두 입력 토큰을 전달합니다. 예를 들어 A=1, B=5가 E0에서 PE(0,0)에 들어오면 acc는 5가 되고 A=1은 오른쪽, B=5는 아래쪽 등록 출력에 나타납니다. E1 직전에 경계에서 다음 A=2, B=7을 주면 PE(0,0)은 14를 더해 acc=19가 됩니다. 그 순간 이웃은 첫 토큰을 소비합니다. 같은 클록 안에 두 PE를 건너뛰는 전달을 허용하면 아래에서 유도할 스큐와 완료 에지 공식이 성립하지 않습니다.

SystemVerilog의 nonblocking 대입은 에지 전 상태를 읽고 에지 후 상태를 갱신하는 표현에 맞습니다. 누산기와 전달 레지스터를 하나의 always_ff 안에 두어도 됩니다. 테스트벤치는 @(posedge clk) 바로 안에서 갱신 이전 값을 읽을 수 있으므로 관측 시간을 일관되게 정해야 합니다. clocking block 또는 시뮬레이터의 적절한 샘플링 영역으로 에지 후 값을 관측하고, 단순히 실행 순서에 기대지 않습니다.

우선순위와 정지

우선순위는 reset > clear > advance입니다. reset은 작업·유효 플래그·누산기를 초기화합니다. clear는 새 작업 시작을 위해 같은 상태를 비웁니다. advance=0이면 모든 PE의 누산기, 전달 값, valid와 태그를 그대로 유지합니다. advance=1일 때만 한 논리 단계 진행하며, 경계의 스큐 스케줄도 같은 신호로 진행합니다. 데이터 값이 0이어도 valid=1이면 실제 항이고, valid=0이면 값을 계산에 쓰지 않습니다.

한 PE의 에지 계약
  1. 에지 전: A, B, valid, 태그가 안정됨
  2. 상승 에지: 기존 입력으로 MAC, 입력을 전달 레지스터에 저장
  3. 에지 후: 새 누산값과 등록 출력 관측

예를 들어 acc=5 상태에서 advance=0을 두 에지 유지하면 acc=5와 전달 토큰이 그대로 남습니다. 다시 advance=1로 돌아온 에지가 다음 논리 단계입니다. 실제 클록 번호와 논리 단계 번호가 달라진다는 점을 결과 보고에 적습니다. 초기화는 advance=0이어도 수행합니다. 이 규칙을 명문화하면, 정지된 배열의 오래된 토큰을 새 작업에서 우연히 다시 더하는 오류를 피할 수 있습니다.

직접 생각해 보기

clear를 E−1에서 완료합니다. E0에서 (1,5), E1에서 advance=0, E2에서 (2,7)을 소비합니다. PE(0,0)의 에지 후 acc와 논리 단계 번호를 쓰세요.

해설 보기

E0 직후 acc=5, 논리 단계 0입니다. E1 직후에도 acc=5이며 다음 논리 단계가 아직 실행되지 않았습니다. E2 직후 acc=19, 논리 단계 1입니다. 두 MAC에 물리 에지는 3개, advance 에지는 2개 사용했습니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.