Altifigence Academy

1 / 24 · 개념

계산식에서 데이터패스 계약으로

연산 결과뿐 아니라 폭, 입력 수락 시점, 출력 유효 조건까지 명시합니다.

회로가 약속할 일을 먼저 적기

데이터패스는 값을 저장하고 선택하고 계산하는 경로입니다. 제어부는 그 경로가 어떤 값을 언제 이동할지 정합니다. 두 부분은 서로 다른 설계 책임이지만 독립적으로 실행되는 프로그램은 아닙니다. 같은 클록 에지에서 제어 신호가 레지스터의 갱신을 결정하고, 레지스터에 저장된 값은 다음 사이클의 조합 연산 입력이 됩니다. 계산식만 정하고 이 시간 관계를 생략하면 맞는 숫자가 잘못된 거래에 붙을 수 있습니다.

이 과정의 작은 계산기는 부호 없는 8비트 입력 a, b와 2비트 연산 코드 op를 받습니다. op=0은 덧셈, 1은 뺄셈, 2는 AND, 3은 XOR입니다. 산술 결과는 8비트 순환 값으로 내보내며 덧셈 carry와 뺄셈 borrow를 별도 비트로 보고합니다. 뒤의 프로젝트에서는 계산 결과와 tag를 함께 전달합니다. tag는 데이터 자체를 계산하지 않지만 어느 입력에서 나온 결과인지 구분하므로 데이터와 같은 경로를 따라야 합니다.

계약 항목이번 설계의 선택
숫자 의미a, b는 0~255의 정수
산술 축소하위 8비트, 즉 256으로 나눈 나머지
경계 정보ADD carry, SUB borrow
입력 수락정해진 상승 에지에서 valid와 ready가 모두 1
순서수락한 입력의 순서대로 결과 전달
리셋진행 중인 거래를 폐기하고 valid를 0으로 시작

예를 들어 a=250, b=10, op=0이면 수학적 합은 260입니다. 출력 데이터는 4이고 carry는 1입니다. 같은 비트열을 signed로 해석하거나 포화 연산을 적용하면 다른 답을 얻습니다. 어느 쪽이 옳은지를 RTL 구문이 대신 결정하게 두지 않습니다. 계약에서 선택한 순환 연산은 메모리 주소 증가에는 편리하지만 밝기 값처럼 최대치를 유지해야 하는 처리에는 적합하지 않을 수 있습니다.

연산과 제어의 경계는 작은 블록도로 확인할 수 있습니다. 입력 레지스터는 이미 수락한 값을 보관하고, ALU는 그 값을 계산합니다. 제어부가 output-valid를 0으로 두면 ALU 출력 비트가 움직이더라도 유효한 거래는 없습니다. 반대로 output-valid가 1인데 결과 tag를 갱신하지 않으면 값과 신원이 어긋납니다. 파형을 읽을 때도 숫자 선만 보지 말고 유효 신호와 tag를 함께 읽습니다.

거래 전달 경로
  1. 수락: 피연산자·연산 코드·tag 저장
  2. 계산: 정한 숫자 계약에 따라 연산
  3. 전달: 결과와 대응 tag를 함께 전달

설계를 시작할 때 모든 출력에 대해 '무슨 값인가'와 '언제 믿어도 되는가'라는 두 질문에 답합니다. 조합 ALU의 지연은 실제 게이트 구현에 따라 달라집니다. 이 강좌의 사이클 모델은 클록 사이 값의 물리적 전파 시간을 측정하지 않으므로 기능 검증과 타이밍 검증을 구분해야 합니다. 먼저 이 계약을 기준 모델과 테스트에 동일하게 옮긴 뒤, 원하는 지연시간과 처리량에 맞춰 레지스터를 배치합니다.

직접 생각해 보기

a=250, b=10의 ADD 결과를 데이터 8비트와 carry로 기록하세요. 출력 데이터가 4인 이유와 tag를 함께 저장해야 하는 이유를 설명하세요.

해설 보기

260=1×256+4이므로 data=4, carry=1입니다. 하위 8비트 계약이 합을 256으로 축소합니다. tag를 별도 시점에 갱신하면 같은 결과 비트가 다른 입력에 잘못 연결되므로 데이터와 같은 수락·정지·전달 조건으로 보관합니다.

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