2024년 8월 23일 금요일

FPGA - XUP - Embedded System Design Flow on Zynq - Lab 2

Topic = Adding IP cores in PL

Lab - 2 Overview = lab-1 에서 만든 시스템을 두개의 GPIO(볌용 입출력) IP를 추가해 확장하기


목표
  • PS의 GP 마스터 포트를 구성해 PL의 IP에 연결한다(AXI4-Lite)
  • 기존 HW설계에 IP를 추가
  • 컴파일러 설정 변경법 숙지
======================================================

Step - 1 - Lab-1 실행
  1. lab-1을 실행시킴
  2. File > Project > save as를 이용해 lab-2로 저장한다(create project subdirectory를 체크해 새로운 lab을 위한 폴더를 생성한다
======================================================

Step - 2 - 2개의 GPIO Instance 추가
  1. source 패널에서 system_wrapper를 확장후 system.bd(system_i)를 더블클릭해 Diagram 출력
  2. ZYNQ 블록을 더블클릭해 RE-Customize IP 열기
  3. 좌측에 PS-PL Configuration 클릭
  4. AXI Non Secure Exablement -> GP Master AXI Interfaces 클릭후 M AXI GP0 Interface를 활성화
  5. General > Enable Clock Reset 에서 FCLK_RESET0_N 활성화
  6. 좌측의 Clock Configuration 에서 PL Fabric Clocks 를 선택해 FCLK_CLK0 옵션을 활성화 하고 Requested Frequency를 100 (100MHZ 를 의미) 으로 변경후 OK
  7. PSU Parameter 관련 Critical Messages 가 나오면 OK 클릭 (무시가능 에러)
  8. 다이어 그램에서 변경된점 확인 (하단 그림처럼 나와야 함)
    1. M_AXI_GP0_ACLK
    2. M_AXI_GP0
    3. FCLK_CLK0
    4. FCLK_RESET0_N

  9. +버튼(또는 우클릭후 Add IP 를 눌러 AXI GPIO 를 검색
  10. 생성된 AXI GPIO 블록 우클릭후 Block Properties 클릭 후 이름을 switches로 변경
  11. GPIO 블록 더블클릭후 속성창 열기
  12. Board 탭의 IP Interface 중 GPIO의  Board Interface 를 drop down 후 sws 2bits 로 변경
  13. IP Configuration 탭을 눌러 Enable Dual Channel과 Enable Interrupt 가 체크 헤지되었는지 확인(이때 채널은 다른 장치와 구성요소갖ㄴ의 유선연결임, 듀얼일때 128bit를 사용하고 싱글은 64 bit를 사용한다)
  14. 확인으로 저장하고 닫는다
  15. Designer Assistance available 을 확인하고 Run Connection Autimation 을 누른다
  16. 좌측 switches 하단의 S_AXI 를 선택
  17. Master 와 Slave인터페이스를 자동으로 연결되도록 클릭하고 확인을 누른다(2개의 추가 block 이 그려진다(Processor System Reset/AXI Interconnection 하단 그림 참조)

  18. 다른 GPIO Instance를 추가하고 이름을 buttons로 바꾼다
  19. 새로 생긴 IP 인 Buttons 를 더블클릭후 GPIO 인터페이스를 btns 4bits 로 바꾼다
  20. AXI Interconnected 를 더블클릭(ps7_0_axi_periph)후 Master Interfaces를 2로 바꾼다

  21. buttons로 추가한 요소의 X_AXI 포트를 클릭하고 AXI Interconnected 블록에 선을 잇는다(M01_AXI 에 선이 이어진다/ Found 1 interface 메시지가 꼭 나와야 한다.
  22. 이와 마찬가지로 다음 포트를 연결한다
    1. Buttons 의 s_axi_aclk -> zynq 7의 FCLK_CLK0 (Zynq처리시스템과 장치가 동기화 통신함)
    2. Buttons 의 s_axi_aresetn -> Processor 의 Reset peripheral_aresetn (Zynq처리시스템이 주변을 Reset한다)
    3. AXI Interconnect M01_ACKL -> Zynq7 Processing system의 FCLK_CLK0
    4. AXI Interconnect M01_ARESETN -> Processor System Reset Peripheral_aresetn
    5. 모든걸을 연결하고 Regenerate Layout을 누르면 다음과 같다

  23. Address Editor 탭을 누르고 Processing_system7_0/Data > Unassigned를 확장시킨다
  24. /buttons/S_AXI를 우클릭해 Assign 한다(주소범위는 0x40000000 ~ 0x7FFFFFFF 이라고 하는데 Buttons/S_AXI = 0x4121_0000 ~ 0x4121_FFFF , switches/S_AXI = 0x4120_0000 ~ 0x4120_FFFF)
    ======================================================
Step - 3 - GPIO 주변 장치 연결을 외부로 만들기
  1. 다이어그램 뷰에서 Designer Assistance가 가능한지 확인한다
  2. Switch 인스턴스에서 GPIO 포트를 마우스 우클릭해 Make External 을 선택해 외부 포트를 만든다-->선이 하나 빠짐
  3. 추가된 GPIO_0 포트를 우클릭해 Properties 를 눌러 이름을 switches 로 변경한다
  4. buttons의 GPIO 를 우클릭해 Run Connection Automation 을 누른다
  5. options 하단 select Board Part Interface 에 btns_4bits를 선택후 OK를 누른다
  6. 생성된 외부 포트의 이름을 buttons 로 변경한다
  7. Design validation 을 수행하고 verify하여 에러가 없는지 확인한다/ 이떄 완성된 다이어그램은 하단과 같다(이때 필요하면 automatic connection을 눌러준다)

  8. Flow Navigator 에서 Run Synthesis 를 실행(저장옵션이 나오면 저장한다)하고 Open Synthesized Design 을 선택하고 확인한다
  9. shortcut 바에서 Layout Dropdown 메뉴에서 I/O Planning 을 선택한다

댓글 없음:

댓글 쓰기