적극적 생각/FPGA

0717 - 섹션3 - AXI4Lite를 활용한 LED제어

무말랭이 2022. 7. 17. 08:50

우리가 지금껏 배운 AXI4-Lite는

PS영역에서 Vitis를 통해

PL영역을 제어할 수 있음을 배웠다.

 

이를 통해서 LED 점등을 시킨후에

유저가 입력한 값으로 점등시간을 변화시킬 수 있도록 할것이다.

(우리는 시리얼과 AXI를 사용하는 것이고, 이더넷과 PCIe로도 응용할 수 있다.)

 

= 설계한 HW Core를 제어하는 것

 

---

 

 

 

---

 

기존 템플릿코드에 (lab9)라는 태그를 붙혀 코드를 추가함

 

<myip_v1_0_S00_AXI>

 

사실 변경된 부분은 이 두 부분이 다인데

output 포트를 선언하고

레지스터와 assign을 해주었다.

 

<myip_v1_0>

 

<counter_toggle_out>

 

... 등 코드변경

 

(잠시, instantiation = 인스턴트화 란?)

http://www.terms.co.kr/instance.htm#:~:text=%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%ED%99%94%EB%8A%94%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%82%B4%EC%9D%98%20%EA%B0%9D%EC%B2%B4,%EB%A5%BC%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EA%B2%83%EC%9D%84%20%EC%9D%98%EB%AF%B8%ED%95%9C%EB%8B%A4.

 

[텀즈] instance, instantiate ; 인스턴스, 인스턴스화

인스턴스는 추상화 개념 또는 클래스 객체, 컴퓨터 프로세스 등과 같은 템플릿이 실제 구현된 것이다. 인스턴스화는 클래스 내의 객체에 대해 특정한 변형을 정의하고, 이름을 붙인 다음, 그것

www.terms.co.kr

 

---

 

실습시작

 

ip suffix

 

실습용파일도 함께 load

copy sources ... 설정해야함 주의.

 

이 hw로 ip만들자

 

ㅇㅋ

 

package과정 잊지말기

 

---

 

우리가 만든 IP를 이용해서 다시 HW Platform 생성

 

프로젝트는 다음과 같이 만든다.

 

create block design

우리가 만든 ip를 repo에 추가

 

차례로 부른다

1. zynq (clk speed 주의 100M로)

2. myip

그리고나서 

run block auto

run connection auto

 

 

UART & 1.8V 또한 항상 확인

 

---

 

자 여기까진 루틴한 작업이었고

 

이제 sw 와 led 에 대해서 포트를 뚫어줄 것이다.

그래야 보드에 연결이 된다.

 

make external

 

(이름 바꿔주는 것도 잊지 말기)

 

여기서는 Constraints가 필요한 상황이라 추가해준다. (근데 해봤자 master)

 

자 이제 얼추 완성이 되었는데

Address만 한번 더 확인해주자.

 

(강의환경과 동일하게 조성을 위해 default 주소를 바꾸어주었다.)

0x4000_0000 -> 0x43C0_0000

 

음 근데 이상하게 map에서는 0x43C0_0000가 안나오지

(우선 잠시 생략은 하되, 확실하게 알고 넘어가야할 포인트인 것으로 보인다.)

 

검증해본다.

 

다시한번 말하지만, 이 에러 4개는 생략할 수 있음.

 

마지막에 wrapper로 싸주고

bitstream 만들어주고

include bitstream 하여 hw export

 

끝!

 

 

---

 

vitis로 넘어간다.

 

우리가 만들었던 xsa 호출해주고

 

네이밍 유의

 

여기서도 실습용파일 호출

 

지난번엔 myip header를 신경써줘야 했는데

이번 시간에는 그게 없는 이유는?

지금은 왜 Build 그리고 Makefile 관련된 버그가 없는 것인지?

관련 공부하면서 파악해보기.

 

휴 정상적으로 build 성공하여 binary 파일이 생겼다.

 

어떤 레지스터에 

어떤 값을

쓰거나 읽을것이냐

 

(이와 같은 컨트롤 연산은 C로 해줘야지

이런 코드를 Core에서 짜주면 좋지 않은 분할이다.)

 

 

실행을 해보자.

 

vitis serial terminal

com port uart

run as

 

 

이때 threshold 값이기 때문에 

100000000 = 1억

정도의 스케일을 넣어주어야 함.

 

---

 

이 파이프라인에 대해서는 계속 반복해서 사용될 파이프라인임.

그렇기 때문에 개념적으로 또한 철저하게 다져야하고, 익숙해져야함.

 

'적극적 생각 > FPGA' 카테고리의 다른 글

0717 - 섹션3 - HW Sleep, FSM(IDLE→RUN→DONE)  (0) 2022.07.17
이더넷  (0) 2022.07.17
0717 - 섹션3 - AXI4Lite  (0) 2022.07.17
vivado ver issue  (0) 2022.07.17
Xilinx DDR4 Controller  (0) 2022.07.16