13 / 24 · 개념
수락 이벤트와 정지 중 안정성
valid와 ready를 각각의 책임으로 나누고 payload 보존 규칙을 적용합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
두 신호가 함께 높을 때만 이동한다
valid는 생산자가 현재 payload를 보낼 수 있다는 약속이고 ready는 소비자가 이번 에지에 받을 공간이 있다는 약속입니다. 상승 에지에서 두 신호가 모두 1이면 정확히 한 거래가 전달됩니다. payload는 결과 비트뿐 아니라 tag, 연산 코드, 주소 등 그 거래에 속한 모든 정보입니다. valid가 높게 여러 사이클 유지되는 것은 같은 거래가 계속 대기한다는 뜻일 수도, ready가 계속 높을 때 매 사이클 다른 거래가 전달된다는 뜻일 수도 있습니다. 에지와 수락 조건을 함께 봐야 구별됩니다.
생산자는 valid=1,ready=0으로 대기하는 동안 payload와 valid를 유지해야 합니다. 이번 과정은 reset 또는 명시적인 flush만 그 약속을 취소할 수 있도록 정합니다. 생산자가 상대 ready를 본 뒤에야 valid를 올리고 소비자가 valid를 본 뒤에야 ready를 올리면 둘 다 0으로 기다릴 수 있습니다. 생산자가 준비한 거래는 ready와 무관하게 valid로 제시하는 규칙을 사용합니다. 이 핵심 수락·보존 원칙은 Arm AMBA AXI 규격의 A3 단일 인터페이스 규칙에서도 확인할 수 있습니다. 여기의 작은 스트림은 전체 AXI 인터페이스 구현을 뜻하지 않습니다.
| 에지 | valid | ready | payload | 전달 |
|---|---|---|---|---|
| 0 | 1 | 0 | tag4,y9 | 없음 |
| 1 | 1 | 0 | tag4,y9 | 없음 |
| 2 | 1 | 1 | tag4,y9 | tag4 한 번 |
| 3 | 1 | 1 | tag5,y12 | tag5 한 번 |
| 4 | 0 | 1 | 의미 없음 | 없음 |
에지 0에서 수락되지 않은 tag4는 에지 1에도 그대로 있어야 합니다. 그 사이 결과 y를 새 계산값으로 덮으면 tag4의 의미가 바뀝니다. 에지 2에서 전달된 뒤에는 다음 payload를 제시해도 되므로 에지 3에는 tag5가 나올 수 있습니다. ready=1만 높은 에지 4에는 읽을 거래가 없습니다. 소비자가 data만 검사하여 두 번 처리하거나 생산자가 valid만 보고 다음 입력으로 넘어가면 손실과 중복이 생깁니다.
비동기 소프트웨어 큐처럼 '함수가 호출된 순간'을 기준으로 생각하지 말고 같은 클록 도메인의 에지를 기준으로 정의합니다. 이 규칙은 클록 도메인 교차를 해결하지 않습니다. 서로 다른 클록에서 ready와 valid를 직접 샘플하면 metastability와 수락 해석 문제가 생기므로 별도 CDC 설계가 필요합니다. 이번 강좌의 모든 스트림 모델은 한 클록이라는 전제를 유지합니다.
검증에는 세 카운터를 쓰면 좋습니다. 입력 제시 횟수 대신 input-valid AND input-ready 에지를 센 accepted, output-valid AND output-ready를 센 delivered, 내부에 남은 outstanding입니다. reset 없는 구간에서 accepted-delivered=outstanding이어야 합니다. 수락된 tag 목록을 기대 큐에 넣고 전달 때 하나씩 꺼내면 숫자가 같아도 거래가 사라지거나 중복되는 오류를 찾을 수 있습니다. 안정성 검사는 대기한 payload를 다음 에지 전 값과 비교하며, 전달 횟수 검사와 함께 해야 프로토콜과 산술을 모두 확인할 수 있습니다.
직접 생각해 보기
표의 에지 0~4에서 valid가 높은 에지는 네 번입니다. 실제 전달 횟수와 전달 tag는 무엇인가요? 에지 1에 y가 10으로 바뀌면 어떤 규칙을 어기나요?
해설 보기
전달은 ready도 높은 에지 2와 3의 두 번이며 tag4,tag5입니다. 에지 0에 정지한 tag4의 payload는 수락까지 보존해야 하므로 에지 1의 y 변경은 정지 중 안정성을 위반합니다.