인프런 커뮤니티 질문&답변
AXI4-lite 수정 관련한 질문
작성
·
1.6K
1
안녕하세요,
수업을 듣고, 이제는 제가 필요한 스펙을 가지는 AXI4를 만들기 위해 수업 처럼 tool에서 새로운 ip 제작을 하려고 하였는데요, 수업 3:18 경 화면에서 보이는 "Data Width"창에서 값을 32bit에서 64bit으로 바꾸려고 하니 아예 선택이 되지 않더라구요.
혹시 여러 lab에 걸쳐서 사용한 "myip_v1_0.v"과 "myip_V1_0_S00_AXI.v"에서 단순히
parameter integer C_S_AXI_DATA_WIDTH = 32를 64로 바꿔주면 될지 아니면 다른 부분들도 수정이 필요한지, 아니면 AXI4-lite로는 32bit만 구현할 수 있는지가 궁금합니다.
답변 1
0
안녕하세요 :)
Xilinx 의 AXI4-Lite 는 제어를 위한 I/F 로 4bytes (32b) 로 사용합니다.
즉, 늘리고 싶어도 늘릴 수 없죠,
수정은 다음과 같이 하시면 됩니다. (쉽게 적지만 어렵습니다.)
1. AXI4 를 이용하셔서, 한번에 받을 수 있는 Data bit 의 양을 늘리셔야 하구요.
2. SW 에서 Reg Write 하는 함수 대신, 다른 방법으로 Data 를 R/W 해야합니다.
2.1 CDMA 라는 DMA 를 사용하셔서, Master 의 권한을 기존의 IP 에게 주던지, (SW가 Master 처럼 사용)
2.2 아니면 직접 R/WDMA 를 설계하셔서 Direct 로 DDR 에 붙여서 Data 를 가져오는 방법이 있습니다. (HW 가 Master 로 사용)
CDMA 사용방법은, 제 블로그 링크에서 확인한 다음링크의 lab4 를 보시면 됩니다.
현업에서는 CDMA 같은 만들어진 IP 대신, R/WDMA 를 직접 설계해서 사용합니다.
즐공하세요 :)
ps. 저의 개인적인 생각으로는, AXI4 protocol 을 지키는 R/W DMA 설계를 학,석 Level 에서 하기가 어렵다고 생각합니다. (불가능하다 는 건 아니에요. 주변 선배, 교수님께 여쭤보시는 것도..?)
Xilinx FPGA 를 하시니까, Vivado HLS 를 사용하시면 금방 설계하실 수 있을꺼에요. (저는 자주 씁니다.)
다음 영상을 보시면 Vivado HLS 를 이용해서 AXI Master 를 설계하는 예가 있습니다.
https://youtu.be/3K0iavI6KL4
영상 대신 글 자료도 많구요. 찾아보시면 도움이 되실 것 같습니다.
AXI4-Lite 정규 문서에서 보면 64b 가능합니다.
하지만 Xilinx 가 지원을 안한다고 적어놨으니 ㅎ
어쩔 수 없죠 ㅠ.ㅠ
아 저 코드는 Xilinx 에서 만든거에요. ADDR_LSB ㅎㅎ (설계자가 protocol 에 맞춰서 가능하도록 해놓은 것 같긴하네요. 하지만 IP 는 지원안한다 이런느낌? )
즐공하세요 :)
제가 한번에 이해가 잘 가지가 않네요 ㅠ
설계자가 protocol에 맞춰서 가능하지만 IP는 지원하지 않는다는 것이 정확히 어떤 뜻인가요?
FPGA에 올릴 수 없다는 뜻인가요?
AXI 프로토콜을 만든 ARM에서는 32b or 64b 을 사용해도 된다라고 명시되어 있지만,
ip를 만든 Xilinx 에서는 64b 은 안되고 32b 만 지원하도록 설계했습니다.
즉, xilinx fpga 에서 axi4-lite 의 data bit 64b 은 사용 불가입니다.
프로토콜 문서의 일부 기능만 지원하도록 설계되었다 이해하시면 되겠습니다 :)
설계자는 둘다 (32b, 64b) 지원하도록 코드를 짰으나, Xilinx 정책은 아니하였다.
https://www.inflearn.com/questions/337201
안녕하세요, 위 질문에서 넘어와서 CDMA를 공부 중입니다.
1. 만약 CDMA를 할 수 있게 된다면, vitis 상에서의 c 코드에서 바로 FPGA 내부의 DRAM에 원하는 값을 저장 할 수 있게 되는건가요?
저희가 수업 랩에서 c 코드를 통해서 BRAM에 원하는 값을 저장하고 읽을 수 있었던 것 처럼, CDMA를 이용하면 DRAM에도 동일한 작업이 가능한지 궁금합니다!!
2. 저희가 수업 랩에서는 BRAM 모듈을 verilog code 상에서 만들어서 사용하였는데요, DRAM의 경우는 어떤 식으로 만들어서 사용하는지가 궁금합니다. 단순히 IP 라이브러리에 있어서 추가만 하면되는지, 아니면 부가적인 작업이 필요한지 궁금합니다.
감사합니다 :)
안녕하세요 :)
이번 질문은, "안해봤다" 는 느낌이 들어서 해보시라고 권장을 드립니다. (해보셨는데... 질문내용이 이렇게 나오기가... 확인차 여쭤보신건지...)
제 생각에는 충분히 본인이 답을 낼 수 있다, 그럴 능력이 되신다고 판단 중 입니다.
1. 만약 CDMA를 할 수 있게 된다면, vitis 상에서의 c 코드에서 바로 FPGA 내부의 DRAM에 원하는 값을 저장 할 수 있게 되는건가요?
CDMA 를 사용하여, DDR 에서 PL의 BRAM 으로 Data 를 Read / Write 할 수 있습니다.
DDR <-> BRAM 의 Data 전송이 자유로워 진다.
저희가 수업 랩에서 c 코드를 통해서 BRAM에 원하는 값을 저장하고 읽을 수 있었던 것 처럼, CDMA를 이용하면 DRAM에도 동일한 작업이 가능한지 궁금합니다!!
Yes (물어보신 것 외에 자유도 or 더 많은 기능이 있습니다. 해보시면 알 수 있습니다.)
2. 저희가 수업 랩에서는 BRAM 모듈을 verilog code 상에서 만들어서 사용하였는데요, DRAM의 경우는 어떤 식으로 만들어서 사용하는지가 궁금합니다. 단순히 IP 라이브러리에 있어서 추가만 하면되는지, 아니면 부가적인 작업이 필요한지 궁금합니다.
공유드린 CDMA 예제를 해보시고 분석 해보시기를 권장드립니다. (스스로 답을 내는 과정도 중요하다 생각합니다.)
해보셨다면, 2번의 답은 충분히 되시리라 생각합니다. 해보시고, 본인이 생각한 내용을 남겨주세요.
그 내용을 보고 CDMA 에 대한 제 의견을 답변드리겠습니다.
ps. 추가 답변드립니다.
DDR 은 이미 존재하고 강의 내에서 사용 해 왔습니다. 다만 Arm processor 가 DDR을 사용했었죠)
"Zynq 는" Processor 가 DDR 에 연결되어 있습니다. "모든 FPGA 가" 이런식으로 사용하는건 아니다 라는 이야기에요.
즐공하세요 :)
해보았는데요... 제가 이해가 느린 편인거 같습니다...!
저희가 수업에서 실습을 진행할 때는 bram controller를 사용한 적이 없고, AXI-lite도 lab_matbi라는 IP 안에 넣어서 사용했어서... 공유해주신 lab을 1부터 4까지 차근차근 따라가서 해보았는데, 아직은 단순히 따라한 것에 그치고 이것을 이해 하기 위해선 좀 더 공부가 필요한 것 같습니다.
제가 판단 미스를 한 것 같아요. ㅠ
해당 Lab 을 공부하시면서, 정리 하신 내용을 올려주시면 첨삭해 드리겠습니다.
(되도록 O,X 답을 드릴 수 있도록 본인생각을 적어주시면 감사하겠습니다.)
즐공하세요 :)






위 그림의 주석과 line 140를 보면 data width가 64이여도 작동할 수 있도록 코드가 general하게 구현되어 있다고 생각했던 것인데, 이 부분은 맛비님께서 그냥 적으신건가요? ㅠㅠ
생각보다 다른 방법은 복잡하네요...! 노력해보겠습니다 ㅎㅎ