• 카테고리

    질문 & 답변
  • 세부 분야

    반도체

  • 해결 여부

    미해결

AXI4-Lite로 Read가 되지 않습니다.

24.05.08 00:53 작성 24.05.08 00:54 수정 조회수 82

1

안녕하세요 맛비님, 좋은 강의 해주셔서 항상 감사드립니다.

저는 현재 설계했던 연산기 core를 검증하기 위해 AXI4-lite 인터페이스를 통해 input과 weight를 write하고, output값을 read하는 모듈을 만들고 있습니다.

 

맛비님 강의에서처럼 bram을 사용하여 메모리를 통해 읽는다면 문제가 되지 않았겠지만, 메모리를 사용하지 않고 이미 설계해논 연산기 core 검증을 위해 무식하게 output값을 read해야 하는 상황입니다.

 

write 할 때, led를 점등하게 하여 write는 잘 되는것은 확인 하였는데, output값이 0으로만 출력되더라고요.

core(o_out_c) --> top --> myip_v1_0. --> myip_v_1_0_S00_AXI(i_out_c) 로 값이 이동합니다.

다음과 같이 slave register 0~6은 write전용, 7은 read전용으로 선언하였고, 코어 bitwidth가 16비트라 AXI와의 호환을 위해 32비트로 늘려주었습니다.

Simulation을 통해 i_out_c에 강제로 값을 넣어주어도 axi_rdata는 읽히지 않더라고요.

(Ready, Valid 모두 1 확인 했습니다)

0x1c번지에 write한 값을 바로 read할 때는 올바르게 출력되는데,

read only로 선언하면 왜 읽히지 않는 걸까요..?

혹시 메모리를 통해 저장해논 값만 읽을 수 있는 걸까요? AXI 구조를 제대로 이해하지 못했기 때문일까요..? 양해 부탁드립니다...

답변 1

답변을 작성해보세요.

0

안녕하세요 🙂

먼저 답을 적기전에 실습코드를 고친부분 + 개인과제 까지 커버를 해드리는건 부담스러운 부분인지라 이 부분은 미리 양해를 부탁드릴게요. (정확한 답변이 어렵고, 파악하고 답을 드리는데 많은 시간이 소모됩니다)

================

음.. 단순하게 생각했을 때

bram 대신 output 을 직접 연결해보시는 건 어떠실까요?

core(o_out_c) -> myip_v_1_0_S00_AXI(o_out_c)

 

혹시 메모리를 통해 저장해논 값만 읽을 수 있는 걸까요? AXI 구조를 제대로 이해하지 못했기 때문일까요..?\

메모리의 값을 읽어서 AXI 로 연결하는 것이 개인적인 생각으로는 난이도가 높은 설계입니다.

당연히 메모리가 아닌 출력을 AXI4-Lite 로 읽을 수 있고요.

이는 이미 FPGA 9 장 10장에서 다루었다고 생각해요.

image

작성해주신 글만 놓고 보면 (어떤 변수가 있을지 모르겠지만) 하고자 하시는 일은, 충분히 가능해 보입니다.

즐공하세요 🙂

장석우님의 프로필

장석우

질문자

2024.05.09

답변 감사합니다. 단순한 문제였는데 코드 리뷰를 제대로 안한 탓이었네요.

myip_v1_0_S00_AXI에서 localparam integer OPT_MEM_ADDR_BITS = 1;을 2로 바꾸지 않아서 adrress read가 한정적으로 되었던 것같네요. 커스텀 할 때는 기본 parameter만 신경썼었는데 전체적으로 코드를 잘 봐야겠습니다. 감사합니다.

해결하셨다니 다행이네요!!

알려주셔서 감사합니다.

즐공하세요 🙂