AMBA 3.0 AXI protocol에 대한 잦은 질문

2주 전부터 몸 상태가 메롱메롱한데, 지난주에 그 상태로 IT-SoC 강좌를 하고 왔더니 평상시 보다 더 못한 강의를 하고 와서 멀리 누리꿈 스퀘어까지 찾아주신 분들께 죄송한 마음이 많습니다. 제가 수원 월드컵 경기장 앞에 살고 누리꿈 스퀘어는 상암에 있으니 수원 월드컵 경기장에서 서울 월드컵 경기장까지 이동하고 나면 정신이 하나도 없더군요.

AXI 강좌를 맡아서 하게 된지 벌써 2년인데, 항상 듣는 이야기들 중의 하나가 학교에서 공부하시는 분들께서 AXI 버스 자체, 그리고 peripheral들을 구하기가 어려워서 많은 분들께서 고생하시고 있는 듯 합니다. ARM에서 university program을 운영하고 있는데, 거기에 AXI 관련 RTL이나 model에 대한 지원이 원활하지는 않은가 봅니다. 저희 회사에서도 일종의 university program을 운용 예정인데요. 실은IDEC의 MPW 프로그램과 연계를 통해서 적극적인 운용을 할 예정입니다. AHB based platform/AXI based platform 모두를 가지고 있습니다만, 일단 AHB 기반으로 출발해서 사용자 요구가 있으면 확대할 예정이지요.

아.. 잡설은 이쯤하고 ^^;

AXI 강좌를 할 때 많이 받는 질문들을 좀 정리해보겠습니다.

AXI의 channel이란 무엇이며, 장점이 뭔가요?

AXI에서 channel은 기존의 protocol에서 양 방향으로 많은 신호가 흐르면서 복잡도가 증가하던 것을 ready 신호 이외의 신호는 한방향(driver-> target)으로 흐르게 해서 전반적인 설계 복잡도를 줄인 것이지요. (신호 자체가 bidirectional이었다는 건 아니니 오해마시길..)

Channel을 채용하여 transaction뿐만 아니라 channel간의 의존성(dependency)도 줄어 들었다는 점이 첫 번째 장점이고, 위의 설계 복잡도를 줄일 수 있었다는 것이 두번째 장점이고, 가장 중요한 장점은 channel에서 valid-ready를 사용하고 있으니, 요청에 대해서 즉시 응답해야 하는 부분이 사라져서 register slicing이 쉬워졌다는 점도 장점이 되죠

AXI 에서 multiple outstanding transaction의 장점이 뭔가요?

AXI의 가장 큰 장점은 slave에서 자신의 상황에 맞게 처리 순서를 바꾸어 줄 수 있다는 것이 되겠습니다. 즉, 필요에 따라 out-of-order를 할 수 있다는 거죠. 그런데, 이런 처리는 다수의 transaction에 대한 정보가 있어야 하는데요, 이러한 다수의 transaction 정보를 slave로 전달하는 것이 바로 multiple outstanding transaction이라는 보시면 되겠습니다. 다수의 트랜젝션 정보를 미리 보낼 수 있으니 slave가 이 중의 하나를 선택적으로 먼저 처리할 수 있는 거죠.. OK?

(물론, 같은 ID를 가지고 multiple outstanding transaction을 만든 경우에는 in-order로 처리하겠다는 의미이니, response 없이 command를 먼저 보내두는 것에 의미를 두어야 합니다. – read가 특히 그렇죠)

ID는 왜 사용하나요?

AXI에서 ID는 실질적으로 interconnection에서 어떤 방식으로 transaction을 다룰지 알려주는 정보이며, transaction의 souce를 나타내는 용도로 사용됩니다. (하나의 master에서 다수의 ID를 발생시키는 경우 virtual channel ID라는 이야기를 사용하는 경우도 있고..). ID가 다른 경우 서로 다른 master(상호 의존성이 없는 혹은 interconnect에서는 의존성을 고려하지 않아도 되는)가 생각해도 크게 다르지 않을 것 같습니다. 보통 interconnect는 내부적으로 ID를 붙이는 rule을 가지고 ID를 확장해가면서 slave에서 master로 어떻게 response를 돌려보낼지 결정합니다. 개인적으로 ID가 존재하므로 AXI는 다양한 형태의 interconnection network을 쉽게 형성할 수 있다고 생각됩니다. (만들기 쉽다는 건 아니구요.)

AMBA 3.0 = AXI 인가요?

AMBA 3.0에서 AXI가 도입된 건 맞는데, AMBA 3.0은 AXI, AHB lite, APB 3.0을 포괄합니다. AXI의 경우 대역폭을 많이 제공해 줄 수 있는 다양한 형태의 interconnection network (crossbar / bus matrix 형태를 주로 사용하죠..) 에서 상당히 괜찮은 결과를 보여줄 수 있어요.

만들기 어렵나요?

개인적인 소견으로는 어렵지는 않고 좀 귀찮게 해요.. script로 짜면 많이 편해져요 ^^;

(추가로..) AXI의 경우 signal이 조금 많아져서 귀찮은 부분이 있는데, channel 덕분에 구현이 어렵지는 않습니다. (system verilog의 경우 interface/struct 등을 쓰면 그나마 좀 편하고)
위의 script를 쓰면.. 의 의미는 일종의 generator를 만들면 어렵지 않다는 의미입니다. 예전에 이 글을 쓸 당시도 perl로 스크립트를 만들어서 설계했고요.. 다만, interconnect의 형태가 다양해졌으니, interface component를 잘 설계하는 것이 쉽지 않겠죠. (설계 자체는 AHB에 귀찮은 기능들이 있어서 사실 설계가 조금 짜증나고, AXI는 성능을 위해서 잘 만들려면 쉽지는 않겠죠. )


—-

p.s 실수 잘하시는 것들 몇개 더.. AXI는 당연히도 input과 output간의 combinatorial feedback이 있으면 안됩니다. 즉, input과 output 신호는 반드시 한번은 f/f을 거쳐야 합니다. reset은 반드시 synchronous deassdert 입니다.

11 thoughts on “AMBA 3.0 AXI protocol에 대한 잦은 질문

  1. 이수영

    AXI/AHB 관련 질문하나만 드리겠습니다. AXI는 interconnection network가 장점이긴 한데요, 만일 AHB에서도 Multi-layer AHB를 사용하게 된다면, 이 경우 Shared Bus 구조보다는 큰 장점이 되겠지요??

    Reply
    1. babyworm

      네. 당연히 장점이 있지요. 서로 다른 master가 다른 slave에 접근할 때 장점이 있는 것이지요. bus에 의한 blocking이 없으니까요.

      단지, AHB multilayer를 사용하는 경우, 사용되는 H/W 자원에 비하여 성능이 아주 많이 향상되지는 않는데, 그 이유는 많은 traffic이 memory controller에 집중될 수 밖에 없기 때문이지요.
      따라서, 이런 부분에 있어서 성능 향상의 가능성을 ‘조금이라도 더’ 제공해 줄수 있는 AXI가 채택되고 있는 것이지요.

      Reply
  2. 김정묵

    안녕하세요? 조금 늦었지만 몇가지 문의 드리고자 합니다
    지금 회사에서 amba designer를 사용중에 있는데요
    혹시 이 툴에서 axi to spram interface example feature를 제공하는 궁금합니다
    뭔가 버스는 만들어졌는데 실제 테스트로 버스에 데이타를 메모리에 넣고 빼보려고하는데요
    이런 예제나 feature같은것이 존재하는지 궁금합니다 버스를 만들고 rtl을 추출하면 간단한 구성이라도 엄청나게 많은 verilog파일들이 생성되어서 실제 어떤파일들을 사용해야하는지 모르겠습니다

    혹시 이와관련된 강의 교재나 혹은 예제같은게 있을까요? 거의 보름이 넘어가는데 도저히 모르겠어서 이렇게 조언 얻고자 글을 올려드립니다

    도와주세요

    Reply
  3. babyworm Post author

    툴에 대한 직접적인 질문은 툴을 구입한 곳에 문의하시면 가장 정확한 답을 얻으실 수 있습니다.툴 값에 포함된 것인데 누려야죠 🙂

    일단, sram을 axi slave로 연결하시는 경우를 의미하시는듯 한데요.. designer 중에 master 예제로 file reader 같은 것으로 transaction을 만들 수 있었던 것으로 기억되네요.

    axi 관련 강의는 아직도 itsoc등에서 많이 하고 있는 것으로 알고있습니다.

    Reply
    1. 김정묵

      서포트 라이센스는 이미 끝났다고 하더라구요 그래서 여쭈어 본거구요 회사에서는 더이상 사용안하기로해서 제 스스로 알아내야 되는것 같더라구요..

      혹시나해서 저도 IT-SOC 검색 많이 해보았는데 역시나 개설이 한번도 없었어요. 혹시 알고 계신 강의가 있으시다면 알려주시면 감사드리겠습니다.

      Reply
  4. 김정화

    안녕하세요?
    Buildbusmatrix.pl로 ahb버스 매트릭스를 구현 할수 있는것으로 알고 있습니다. 다름이아니라.
    좀 헷갈리는것이 있는데요 Buildbusmatrix.pl로 만들수 있는 버스의 종류는 multi layer ahb 그리고 ahb lite 이 둘다가 만드는것이 가능한것인지 헷깔립니다. 즉 마스터 하나에 여러개의 슬레이브를 지정해서 만들면 라이트로 생성되고 만약 마스터를 여러개 생성한다면 multi layer라고 보면 되는건지 아니면 따로 옵션을 주어야하는것인지 모르겠습니다.

    Reply
  5. 김정화

    안녕하세요?

    혹시 buildbusmatrix.pl로 ahb 버스를 만들때 만들어지는 버스는 ahb lite인건가요? 아니면 multi layer ahb인건가요? 정말 이부분이 너무 애매해서 혹시 아시면 답변 부탁드려보아요

    Reply
  6. 부엉이

    안녕하세요?
    블로그 애독자 입니다. ^^;

    다름이아니라 RTL 을 작성하고 있는데요 몇일을 끙끙 알다가 갑자기 Babyworm 님이 생각나서 이렇게 댓글로 문의아닌 문의를 드려요..
    log(x) 나 exp(x) 를 verilog 로 작성을하려고 하는데요.. 이게 여간해서는 컨셉 정도는나와있는데 실제로 이족에서 일하시는 분들은 어떻게 만들어서 사용하시는지 혹시 알수 있을까요?.

    그리고 블로그 포스팅 하신것중에 PLI 를 언급하셔서 찾아봤더니 아주 좋은 기능이더라구요.. 그런데 PLI 랑 VPI 가 같은 거 아닌가요? 왜 2개가 따로 있는지…조금 이해가 안가서요..

    Reply
    1. babyworm

      arithmetic logic에 관련해서는 워낙 방식이 많아서 따로 글을 쓸까 생각중입니다. 일단, log, exp의 경우 대부분 approximation하는 방식(newton raphson 등등)을 많이 사용하고, approximation speed를 높이기 위해서 초기의 iteration에는 Lookup table을 사용하는 경우가 많습니다.
      아주 제한적인 입력인 경우에는 ROM을 같이 사용하는 방식도 있고요..

      PLI v1.0이 ACC + TF 를 이야기하고, VPI가 PLI v2.0이라고 이야기합니다.
      현재 PLI는 ACC, TF, VPI를 모두 포함하지만, 실절적으로는 VPI를 거의 사용하고, 간단한 것을 만들때만 딱 맞는 ACC 함수들이 있으면 빌려다 쓰는 정도고, 요즘엔 그냥 간단한 건 SystemVerilog의 DPI를 좀 더 많이 사용합니다. .

      Reply
  7. Mishall

    안녕하세요, Ethan.
    NoC의 “multiple outstanding transaction” 가 저를 여기로 이끌었습니다.
    친근한 babyworm이 눈에 확 띄네요. 감사히 배우고 갑니다.

    Reply

Leave a Reply