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도 줄어 들었다는 점이 첫 번째 장점이고, 위의 설계 복잡도 문제가 두번째 장점이고, register slicing이 쉬워졌다는 점이 장점이 되죠










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


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










ID는 왜 사용하나요?


AXI에서 ID는 실질적으로 interconnection에서 routing을 할 때 사용됩니다. 즉, 해당 data transaction이 어떤 방향으로 흘러가야 할지에 대한 정보로 사용되는 거죠. 통신에서 IP주소라고 생각해도 그리 다르지 않을 것 같습니다. 실질적으로 ID가 존재하므로 AXI는 다양한 형태의 interconnection network을 쉽게 형성할 수 있다고 생각됩니다. (만들기 쉽다는 건 아니구요.)










AMBA 3.0 = AXI 인가요?


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










만들기 어렵나요?


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


—-

역시 MS word 2007로 쓰는 것이 가장 편하군요.. ^^; tag를 못 잡는 것 제외하구요..

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

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

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

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

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

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

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

    도와주세요

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

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

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

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

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

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

  5. 안녕하세요?

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

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

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

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

    1. 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를 좀 더 많이 사용합니다. .

Leave a Reply