Handshake를 위한 Ready / Valid Protocol

Hyobyung Han·2022년 3월 22일
0

ARM

목록 보기
1/2

Introduction

Ready/valid protocol은 data 전송 시 사용하 수 있는 심플하고 일반적인 handshake 방식이며, ABMA AXI에서 flow control을 위해 사용되는 signal이기도 하다.

Protocol Description & Link State

Transmitter와 Receiver가 있다고 가정해보자.
data를 보내거나 받기 전에는 handshake 과정이 필수적이다.

Transmitter는 유효한(valid) data를 가지고 있어야 하며,
Receiver는 Data를 받기 위해 준비되어야(be ready) 한다.
즉 이 두 valid/ready 정보가 전부 asserted (active) 상태여야 데이터를 주고받을 수 있는 것이다. (*여기서 assert란 신호가 inactive -> active로 가는 것)

valid와 ready의 값에 따라 총 4가지의 상태가 존재한다. (표를 보고 이해하는 게 빠를 것 같다..)

상태readyvalid설명
Idle00Transmitter가 valid data를 가지고 있지 않음.
Wait for Ready01Transmitter가 valid data를 가지고 있지만 Receiver가 준비되지 않음. 이 때는 Data가 전송되면 안 됨.
Wait for Valid10Receiver가 data를 전달받을 준비가 되었지만 transmitter가 가지고있지 않음.
Transfer11Transmitter가 valid data를 가지고 있고, Receiver가 준비됨. Data 전송 가능.

그리고 AMBA specification에서는 READY/VALID 동작에 대해 두 가지 동작이 나와있는데,
1) transmitter는 VALID를 assert하기 전까지 READY를 기다리지 말아야 함.
2) 한 번 VALID가 assert되고 나면 handshake가 일어나기 전까지는 계속 그 상태(asserted)를 유지해야 한다. 즉 VALID와 READY가 둘 다 rising clock에서 asserted되었을 때까지는 유지해야 한다.

첫 번째 규칙은 성능 요구사항에 의한 것이다. 무작정 기다리면 성능 loss가 발생하기 때문에 ready와 valid 시그널은 반드시 독립적이어야 한다.

두 번째 규칙은 Ready 상태에서 벗어나기 위한 제약이다. 일단 transmitter가 valid data를 가지면 전송 규칙을 어기면 안 된다. receiver가 ready 상태가 될 때까지는 기다려야 한다.

Reference

http://www.cjdrake.com/readyvalid-protocol-primer.html

0개의 댓글