적극적 생각/FPGA

0716 - 섹션3 - AXI4Lite

무말랭이 2022. 7. 16. 07:10

---

 

AXI4-Lite Testbench

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842507/Using+the+AXI4+VIP+as+a+master+to+read+and+write+to+an+AXI4-Lite+slave+interface

 

---

 

 

---

 

새 프로젝트

create block IP

 

lab07 ip 호출

zynq ip 호출

clk을 50M에서 100M으로

 

run block automation

run auto connection

 

그리고 이번엔 UART 쓸 것

원래 안쓰는 것들 꺼줘야 하는데 

1.8V인것만 확인하고 패스

 

이 AXI가 정상적으로 구성되고 작동하는지를 확인하고 싶음

해당 path Debug

벌레 모양이 ㅐㅅㅇ긴다

거기서 run connection automation으로 들어가면

자동으로 ila를 연결해준다.

 

HW 구성이 일차적으로 끝났으니

이 상태에서 Validate Design 한번

 

(여기서 critical warning이 뜨는 이유는

2020 ver으로 넘어오면서 zybo board의 PCB 회로에서의 delay 관련 정책이 바뀌어서 그런것)

 

(여기서 잠깐 확인하고 넘어가면 좋은게

processing system 7이 zybo board인데

slave axi에 대해서 address 와 range 64KB

레지스터 4개만 쓸거니깐 16KB 이상만 있으면 동작함.

base address를 손을 댈 수는 있지만, 아직 바꾸지는 않도록 하겠음.

ip를 여러개 쓰면서 AXI-Lite로 제어하고자 할때, 겹겹이 쌓을때 쓸수도 있음.

address개념만 짧게 확인하고 넘어가면 충분하다.)

 

이 보드파일을 wrapper로 싸서

top으로 만드는 작업

 

 

주변에 periperal을 쓰지 않기 때문에

xdc는 사용하지 않았음.

(LED 등)

 

비트스트림 생성

끝나고 cancel로 나가기

 

(그 과정에서 짧게 보면

ila가 큰 리소스를 쓰는 것을 볼 수 있음)

 

이제 vitis로 넘어가기 위해

export hardware

include bitstream

naming

vitis run 

(15:33)

 

---

 

근데 잠시!! 비트스트림 생성에서 에러가 났다.

 

여기서 제시하고 있는 에러는 현재 내가 발생한 에러와는 차이가 있다.

나는 지금 bitstream 생성단에서 막힌것이기  때문.

 

한번 확인해보자.

 

zybo board에 문제가 있다.

중간에 setting을 수정하는 과정에서 

UART0이 아닌 UART1을 설정해두었다.

(근데 이걸로 에러가 생길것 같진 않은데,

그럼에도 불구하고 한번 다시 해보긴 해보자.)

 

해결완료!

 

---

 

vitis로 왔다.

만든 xsa 파일을 추가해준다.

naming

blank c 생성하고

별도의 c파일 이용

 

//////////////////////////////////////////////////////////////////////////////////
// Company: Personal
// Engineer: Matbi / Austin
//
// Create Date:
// Design Name: axi4_lite test
// Project Name:
// Target Devices:
// Tool Versions:
// Description: test axi4-lite. This is to check the operation using the ILA.
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
 
#include <stdio.h>
#include "xparameters.h"
#include "xil_io.h"
#define AXI_DATA_BYTE 4

int main() {
    int data[4];
    while (1) {
 
// Org Code
//        MYIP_mWriteReg(XPAR_MYIP_0_S00_AXI_BASEADDR, MYIP_S00_AXI_SLV_REG0_OFFSET, 1);
//        MYIP_mWriteReg(XPAR_MYIP_0_S00_AXI_BASEADDR, MYIP_S00_AXI_SLV_REG1_OFFSET, 2);
//        MYIP_mWriteReg(XPAR_MYIP_0_S00_AXI_BASEADDR, MYIP_S00_AXI_SLV_REG2_OFFSET, 3);
//        MYIP_mWriteReg(XPAR_MYIP_0_S00_AXI_BASEADDR, MYIP_S00_AXI_SLV_REG3_OFFSET, 4);
//        data[0] = MYIP_mReadReg(XPAR_MYIP_0_S00_AXI_BASEADDR, MYIP_S00_AXI_SLV_REG0_OFFSET);
//        data[1] = MYIP_mReadReg(XPAR_MYIP_0_S00_AXI_BASEADDR, MYIP_S00_AXI_SLV_REG1_OFFSET);
//        data[2] = MYIP_mReadReg(XPAR_MYIP_0_S00_AXI_BASEADDR, MYIP_S00_AXI_SLV_REG2_OFFSET);
//        data[3] = MYIP_mReadReg(XPAR_MYIP_0_S00_AXI_BASEADDR, MYIP_S00_AXI_SLV_REG3_OFFSET);

// Modified Code for Ver 2021.1
	Xil_Out32((XPAR_MYIP_V1_0_0_BASEADDR) + (0*AXI_DATA_BYTE), 1);
	Xil_Out32((XPAR_MYIP_V1_0_0_BASEADDR) + (1*AXI_DATA_BYTE), 2);
	Xil_Out32((XPAR_MYIP_V1_0_0_BASEADDR) + (2*AXI_DATA_BYTE), 3);
	Xil_Out32((XPAR_MYIP_V1_0_0_BASEADDR) + (3*AXI_DATA_BYTE), 4);

	data[0] = Xil_In32((XPAR_MYIP_V1_0_0_BASEADDR) + (0*AXI_DATA_BYTE));
	data[1] = Xil_In32((XPAR_MYIP_V1_0_0_BASEADDR) + (1*AXI_DATA_BYTE));
	data[2] = Xil_In32((XPAR_MYIP_V1_0_0_BASEADDR) + (2*AXI_DATA_BYTE));
	data[3] = Xil_In32((XPAR_MYIP_V1_0_0_BASEADDR) + (3*AXI_DATA_BYTE));
 
        for (int i =0; i < 4; i++)
            printf ("data[%d] %d \n", i , data[i]);
        sleep(1);
    }
    return 0;
}

 

 

build 까지 성공

 

어 아니네 build가 제대로 안되었네.

#include <xparameters.h>의 이슈인데

절대경로로 바꾸어도 

(컨트롤 누르고 클릭되면 정상 파일 위치로 이동하는 것을 보니

해당 주소에 대한 호출은 정상적으로 이루어지고 있다.)

계속 똑같은 문제 발생

 

빌드만 안되는 것이 아니라

그 과정에서 design_1_wrapper 파일이 out-of-date 되면서

이상하게 변경되는 이슈도 함께 생긴다.

 

혹시나 파일 이름이 숫자로 시작하는 것 때문인가 싶어서

파일 이름을 영어로 시작하게 또 새로 vitis 프로젝트를 구축해주었다.

(이거 말고 잘못된 것이 안보이는데 ... ㅠ_ㅠ 뭘 바꿔줘야 에러가 해결될까.)

 

 

그래도 오류 발생

 

 

이번에는 makefile을 바꿔보았으나 

그럼에도 불구하고 오류가 발생한다.

COMPILER=
ARCHIVER=
CP=cp
COMPILER_FLAGS=
EXTRA_COMPILER_FLAGS=
LIB=libxil.a

RELEASEDIR=../../../lib
INCLUDEDIR=../../../include
INCLUDES=-I./. -I${INCLUDEDIR}

INCLUDEFILES=*.h
LIBSOURCES=*.c
OBJECTS = $(addsuffix .o, $(basename $(wildcard *.c)))
ASSEMBLY_OBJECTS = $(addsuffix .o, $(basename $(wildcard *.S)))

libs:
	echo "<CustomIP_name>..."
	$(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES)
	$(ARCHIVER) -r ${RELEASEDIR}/${LIB} ${OBJECTS} ${ASSEMBLY_OBJECTS}
	make clean

include:
	${CP} $(INCLUDEFILES) $(INCLUDEDIR)

clean:
	rm -rf ${OBJECTS} ${ASSEMBLY_OBJECTS}

 

음 xsa파일의 문제일까

내 xsa파일 말고, 실습 코드의 xsa파일을 사용해본다.

제공하지 않네.

다시 xsa 파일 추출부터 다시해본다.

 

그래도 안된다.

 

---

 

platform out-of-date 이슈에 대해 확인해보아야 할 것 같은데

그 전에 그냥 새로운 프로젝트 생성부터 다시해보자.

 

https://support.xilinx.com/s/question/0D52E00006hpX0BSAU/platform-outofdate?language=en_US 

 

Platform Out-of-date

 

support.xilinx.com

 

(그 과정에서 확인해봤는데 ali가 많이 activation시키기는 하구나)

 

으악! 그래도 안된다. ㅠ_ㅠ

정확하게 동일한 상황 ...

 

---

 

그래서 결국 강의에 질의응답을 남겼다.

잠시 홀딩 ...

https://www.inflearn.com/questions/595178

 

8장 오류 발생 - 인프런 | 질문 & 답변

안녕하세요. 강의 재미있게 잘 듣고 있습니다. 이런 소중한 강의 만들어주셔서 감사합니다.   8장 build 과정에서 error가 발생하는데, 그 에러가 극복이 안되어서 여쭙습니다.   ---   현재 저는 Viv

www.inflearn.com