2012. 6. 1. 02:04

AMBA AXI PROTOCOL v1.0 - CHANNEL HANDSHAKE II

채널 핸드쉐이크의 두 번째 내용을 추가적으로 설명해 드리겠습니다.

 

3.2 Relationships between the channels

 

The relationship between the address, read, write, and write response channels is flexible.
For example, the write data can appear at an interface before the write address that relates to it. This can occur when the write address channel contains more register stages than the write data channel. It is also possible for the write data to appear in the same cycle as the address.


이 절 첫머리를 보면 다섯 채널간에 유연성을 가지고 있다고 나와 있습니다만, 스펙 본문의 예로, WRITE DATA가 WRITE ADDRESS보다 인터페이스에 먼저 도착할 수 있다는 의미로 설명되어 있는데요. 이 경우에 WRITE ADDRESS CHANNEL에서 WRITE DATA CHANNEL보다 더 많은 REGISTER SLICE를 가지고 있을 때를 의미합니다. 그리고 ADDRESS와 같이 동일한 사이클에 WRITE DATA가 도착하는 것이 가능하다고 합니다. 물론, SLAVE에 DATA가 먼저 도착하더라도 ADDRESS와 CONTROL INFORMATION 없이 동작하는 것은 불가능합니다. 다만 여기에서 위와 같이 언급한 이유가 있는데요. 예를 들어, ADDRESS는 이슈하는 데에 1 cycle, DATA 전송하는 데에 2 cycle로 가정합시다. 채널간의 유연성이 없을 경우 항상 순서 그대로 ADDRESS, DATA가 도착해야 하니 3 cycle을 소요해야 하지만, ADDRESS와 DATA가 동시에 도착할 수 있다면 2 cycle에 완료할 수 있습니다. 이 부분 역시 성능을 고려한 스킴이라고 볼 수 있겠네요. 저도 좀 더 명확하게 알기 위해, 회사에서 AMBA를 정말 잘 알고 있는 외국 엔지니어에게 물어봤습니다 :)

 

When the interconnect must determine the destination address space or slave space, it must realign the address and write data. This is required to assure that the write data is signaled as valid only to the slave for which it is destined.

Two relationships that must be maintained are:
• read data must always follow the address to which the data relates
• a write response must always follow the last write transfer in the write transaction
  to which the write response relates.

 

바로 위에서 언급된 내용은 일반적인 설명들입니다. BURST TRANSACTION이 필요할 때, MASTER가

INTERCONNECT로 ADDRESS를 이슈하고 DATA TRANSFER를 보내는데, INTERCONNECT에서는 대상 SLAVE의 ADDRESS를 결정해야 하고 해당 SLAVE의 ADDRESS의 위치에 따라 정렬해야 한다는 내용입니다.

 


3.3 Dependencies between channel handshake signals

 

To prevent a deadlock situation, you must observe the dependencies that exist between the handshake signals.
In any transaction:
• the VALID signal of one AXI component must not be dependent on the READY
   signal of the other component in the transaction
• the READY signal can wait for assertion of the VALID signal.

 

이전 시간에 VALID와 READY 핸드쉐이크에서 VALID나 READY가 누가 먼저 ASSERT되더라도 상관없다고 언급하였는데요. 하지만 일부 VALID나 READY가 반드시 ASSERT되어야만 다음 VALID 혹은 READY를 ASSERT할 수 있는 경우가 있습니다.

아래 그럼 3-4와 3-5에서 handshake signal dependencies를 보여주고 있습니다만, 싱글 헤드 포인터는 두 시그널의 관계에서 둘 중 어떤 시그널이 먼저 ASSERT되더라도 상관없다는 것을 나타내고 더블 헤드 포인터는 지시하는 쪽이 먼저 선행되어야 지시당하는 쪽이 ASSERT될 수 있다는 의미입니다.

 

 

Figure 3-4 shows that, in a read transaction:
• the slave can wait for ARVALID to be asserted before it asserts ARREADY
• the slave must wait for both ARVALID and ARREADY to be asserted before it
   starts to return read data by asserting RVALID

  

위의 설명대로 슬레이브는 ARREADY가 ASSERT하기 전에 ARVALID 시그널이 ASSERT하도록 기다릴 수 있고 반대로 ARVALID가 ASSERT하기 전에 ARVALID 시그널이 ASSERT하도록 기다릴 수도 있습니다.
하지만 두 번째 문장처럼 RVALID가 ASSERT하기 전에 ARVALID와 ARREADY 모두 ASSERT하도록 기다려야만 합니다.

 

 

Figure 3-5 shows that, in a write transaction:
• the master must not wait for the slave to assert AWREADY or WREADY before
   asserting AWVALID or WVALID
• the slave can wait for AWVALID or WVALID, or both, before asserting AWREADY

• the slave can wait for AWVALID or WVALID, or both, before asserting WREADY
• the slave must wait for both WVALID and WREADY to be asserted before asserting BVALID.

• the slave can wait for AWVALID or WVALID, or both, before asserting WREADY
• the slave must wait for both WVALID and WREADY to be asserted before asserting BVALID.

 

Note
It is important that during a write transaction, a master must not wait for AWREADY
to be asserted before driving WVALID. This could cause a deadlock condition if the
slave is conversely waiting for WVALID before asserting AWREADY.

 

 

위의 화살표로 나타난 그림이 복잡해 보인다면, 아래의 그림과 함께 보면 좀 더 쉽게 보실 수 있습니다.

예를 들어, [1] Read transaction인 경우에는 Read Address 관련 시그널들은 VALID나 READY 둘 중 어느 시그널이 먼저 ASSERT가 되어도 상관 없다고 말씀드렸습니다만, 점선을 넘어가는 시점(더블 헤드 포인터)에서는 Read Address 관련 시그널들이 선행되어야만 Read Data Signal들이 ASSERT할 수 있습니다. [2] Write transaction을 보시면 마찬가지로 점선을 넘어가는 시점이 더블 헤드 포인터로 나타납니다.

 

 

              [1] Read transaction                                    [2] Write transaction

 

     

정리하면, DEADLOCK을 피하기 위해 VALID/READY 시그널이 선행적으로 ASSERT되어야 하는 경우를 알아야 합니다. 그리고 서로 ASSERT하는 시그널의 순서에 상관없는 경우임에도 불구하고 시그널간의 의존성을 가지도록 구현한다면 DEALOCK에 빠질 수 있기 때문에 이를 주의해야 합니다.

 

시간이 늦었으니 오늘은 여기까지만 정리하도록 하겠습니다. 좋은 하루 보내세요.

 

 

Written by Simhyeon, Choe