2018년 11월 14일 수요일

PETALINUX 사용법(module, apps, init-script)

1. 커널 소스(드라이버 소스파일)수정 
  PetaLinux을 빌드한 후 생성된 이미지는 <plnx-proj-root>/image/linux에 있으며, 커널 소스는 <plnx-proj-root>/build/tmp/work-shared/plnx_aarch64 폴더 아래 있다.

1.1 커널소스를 수정하고 싶으면 나같은 경우 xilinx git에서 커널 소스를 다운받은 후 petalinux-config 에서 Linux Components Selection---> linux-kernel (linux-xlnx)---> ext-local-src 를 선택 한다.

1.2  ext-local-src를 선택하게 되면 하위 External linux-kernel local source settings---> 항목이 생기고 여기에 들어가서 xilinx git에서 받은 커널 소스(압축을 푼)위치를 적어주면 된다.

1.3 이후 커널 코드 수정후 petalinux-build -c kernel 하게되면 변경된 코드로 이미지를 만들어준다.

2. 사용자 모듈 만들기
2.1 기본적인 명령은 아래와 같다.
$ petalinux-create -t modules --name <user-module-name> --enable
$ petalinux-create -t modules --name cdma-driver --enable 명령을 실행하게 되면 <plnx-proj-root>/project-spec/meta-user/recipes-modules/cdma-driver/files에 Makefile과 cdma-driver.c파일이 생성된다.
cdma-driver.c파일의 소스코드를 수정후에 사용하면 된다.

2.1.1 사용자가 추가된 파일이 있을경우 bb파일의 생성한 파일의 리스트업해줘야 한다.
cdma-driver.bb file 수정

SRC_URI = "file://Makefile \
           file://cdma-driver.c \
           file://cdma.c \
           file://include/cdma.h \
       file://COPYING \
          "
2.1.2 사용자의 헤더파일을 Makefile의 추가해주어야 한다.
obj-m := cdma-drv.o
cdma-drv-objs := cdma-driver.o cdma.o

SRC := $(shell pwd)

#ccflags-y := -I$(src)/include

all:
$(MAKE) -C $(KERNEL_SRC) M=$(SRC) ccflags-y+=-I$(src)/include

modules_install:
$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install

clean:

2.2 빌드하기
디버깅을 위한 빌드 아티펙트를 사용하기 위해 project-spec / meta-user / conf / petalinuxbsp.conf에 다음 행을 추가해준다.
RM_WORK_EXCLUDE + = "cdma-driver"

$ petalinux-build -c cdma-driver 
한번 빌드 후 코드 수정을 하고 다시 빌드하기 위해서는 아래 절차를 따라야 한다.
$ petalinux-build -c cdma-driver -x do_clean
$ petalinux-build -c cdma-driver

2.3 컴파일 완료된 모듈 위치
<plnx-proj-root>/build/tmp/work/plnx_aarch64-xilinx-linux/cdma-driver/1.0-r0/sysroot-destdir/lib/modules/4.9.0/extra

2.4 컴파일시 아래와 같은 오류가 나면 모듈이름으로 대문자가 포함되어서이다.
ERROR: petalinux-user-image-1.0-r0 do_rootfs: intrChecker not found in the feeds (plnx_aarch64 aarch64 noarch any all) in /home/pcw1029/projects/RCS/petalinux/zcu102/build/tmp/deploy/rpm.

ERROR: petalinux-user-image-1.0-r0 do_rootfs: This is often caused by an empty package declared in a recipe's PACKAGES variable. (Empty packages are not constructed unless ALLOW_EMPTY_<pkg> = '1' is used.)

ERROR: petalinux-user-image-1.0-r0 do_rootfs: Function failed: do_rootfs

ERROR: Logfile of failure stored in: /home/pcw1029/projects/RCS/petalinux/zcu102/build/tmp/work/plnx_aarch64-xilinx-linux/petalinux-user-image/1.0-r0/temp/log.do_rootfs.19016

ERROR: Task (/home/pcw1029/projects/RCS/petalinux/zcu102/project-spec/meta-plnx-generated/recipes-core/images/petalinux-user-image.bb:do_rootfs) failed with exit code '1'

3. 사용자 Application 만들기

3.1 기본적인 명령은 아래와 같다.
$petalinux-create -t apps [--template TYPE] --name <user-application-name> --enable  
$ petalinux-create -t apps --name bramMem --enable 
명령을 실해하게 되면  <plnx-proj-root>/project-spec/meta-user/recipes-apps/bramMem/files/위치에 폴더와, 기본적으로 Makefile 과 bramMem.c파일이 생성된다.
c파일에는 hello world를 출력하는 구문만 있다. 이 코드를 수정해서 사용하면 된다. 

3.2 생성한 파일 빌드하기
$ petalinux-build -c bramMem 
한번 빌드 후 코드 수정을 하고 다시 빌드하기 위해서는 아래 절차를 따라야 한다.
$ petalinux-build -c bramMem -x do_clean
$ petalinux-build -c bramMem
$ petalinux-build -c bramMem -x do_install

3.3 컴파일 완료된 바이너리 위치
<plnx-proj-root>/build/tmp/work/aarch64-xilinx-linux/bramMem/1.0-r0/
bramMem 파일을 tftp를 이용하여 타켓보드에 올려서 테스트하면 된다.

3.4 application auto run at startup
3.4.1. 부팅시 자동으로 어플리케이션을 실행하는 

4. INIT script만들기

*주의 : 스크립트 이름은 반드시 소문자로 해야한다. 대문자인 경우 /etc/rc5.d/ 위치로 복사가 이루워지지 않는다.

4.1 기본적인 명령은 아래와 같다.
$petalinux-create -t apps --name rf-ctrl-app-init --enable --template install
명령이 실행되면 <plnx-proj-root>/project-spec/meta-user/recipes-apps/rf-ctrl-app-init폴더에 rf-ctrl-app-init.bb 파일과 files폴더가 생성된다.
 4.1.1 rf-ctrl-app-init.bb 파일 수정
#
# This file is the rfCtrlApp-init recipe.
#

SUMMARY = "Simple rf-ctrl-app-init application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://rf-ctrl-app-init \
    "   

S = "${WORKDIR}"

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
inherit update-rc.d
INITSCRIPT_NAME = "rf-ctrl-app-init"                              
INITSCRIPT_PARAMS = "start 30 5 ."


do_install() {
#        install -d ${D}/${bindir}
#        install -m 0755 ${S}/rf-ctrl-app-init ${D}/${bindir}
    install -d ${D}${sysconfdir}/init.d
    install -m 0755 ${S}/rf-ctrl-app-init ${D}${sysconfdir}/init.d/rf-ctrl-app-init
}

FILES_${PN} += "${sysconfdir}/*"

4.1.2 files/rf-ctrl-app-init 파일 수정
#!/bin/sh

PIDFILE_RFCTRLAPP=/var/run/rfCtrlApp.PIDFILE_RFCTRLAPP                                                                                                                                                      
DAEMON_RFCTRLAPP=/usr/bin/rfCtrlApp

start()
{
    echo "Starting rfCtrlApp"
    start-stop-daemon -S --make-pidfile --pidfile $PIDFILE_RFCTRLAPP -o --background -x $DAEMON_RFCTRLAPP
}

stop()
{
    echo "Stoping rfCtrlApp"
    start-stop-daemon -K -x $DAEMON_RFCTRLAPP -p $PIDFILE_RFCTRLAPP
    rm -f $PIDFILE_RFCTRLAPP
}

restart()
{
    stop
    start
}

[ -e $DAEMON ] || exit 1

    case "$1" in
        start)
            start; ;;
        stop)
            stop; ;;
        restart)
            restart; ;;
        *)  
            echo "Usage: $0 {start|stop|restart}"
            exit 1
    esac
exit $?



5. 사용자 디바이스 트리 추가하기

2018년 11월 7일 수요일

PETALINUX 설치 및 설정

우선 PetaLinux설치를 위해 필요한 파일들을 Xilinx에서 다운 받는다.
보드는 ZCU102를 사용하기 때문에 설정에 필요한 xilinx-zcu102-v2017.3-final.bsp 파일과 설치를 위한 petalinux-v2017.3-final-installer.run 파일이 필요하다.
OS : Ubuntu 16.04  (petalinux v2017은 ubuntu16.04이상에서 지원 안함)
Free HDD : 100G 이상
MEM : 4G 
Core 개수 : 4개이상 을 권장한다.

1.  UG1144문서에 따르면 설치를 위해서 필요한 패키지 무지 많다. 따라서 PetaLinux 설치를 위해 필요한 모든 패키지 들은 설치해줘야 한다. 
정학히 어떤 패키지가 설치되어 있고 어떤 패키지들이 추가로 필요한지 확인하는 방법은 무식하게 ./petalinux-v2017.3-final-installer.run 를 실행해 보면 알수있다.
나같은 경우 아래 리스트가 추가적으로 필요하다고 알려주고 있다.
- gawk
- xvfb-run
- chrpath
- socat
- autoconf
- libtool
- git
- gawk
- texinfo
- zlib1g-dev
- gcc-multilib
- libsdl1.2-dev
- libglib2.0-dev
- zlib
- ncurses
- openssl
- zlib1g:i386

2. 추가 설치가 필요한 패키지 설치 - sudo apt-get install를 이용해 아래와 같이 추가 설치해 준다.
$ sudo sudo apt-get install python
$ sudo apt-get install tofrodos iproute2 gawk gcc git make net-tools libncurses5-dev zlib1g-dev libssl-dev flex libselinux1 wget diffstat chrpath
$ sudo apt-get install socat xterm autoconf libtool texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev
$ sudo apt-get install xvfb
$ sudo apt-get install zlib1g:i386

3. 파일 다운로드를 위해 tftpd도 함께 설치하고 아래와 같이 설정한다. 
$ sudo apt-get install xinetd tftp tftpd
$ sudo vi /etc/xinetd.d/tftp
service tftp
{
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /tftpboot
    disable         = no
    per_source      = 11
    cps             = 100 2
    flags           = IPv4
}

4. tftpd에서 사용될 폴더를 만들고 설정을 적용하기 위해 아래 명령을 수행한다.
$ sudo mkdir /tftpboot
$ sudo chmod 777 /tftpboot
$ sudo /etc/init.d/xinetd restart

5. 위와같이 수행했을때 문제는 딱히  발생하지 않았다. 이제 ./petalinux-v2017.3-final-installer.run를 다시 실행한다.
$ ./petalinux-v2017.3-final-installer.run /opt/xilinx/petalinux_2017_03
$ source /opt/xilinx/petalinux_2016_04/settings.sh

6. zcu102보드의 설정을 맞추가 위해 아래와 같이 실행한다.
$ petalinux-create -t project -s ./xilinx-zcu102-zu9-es2-rev1.0-v2016.4-final1.bsp
실행이 완료되면 현재 폴더에 xilinx-zcu102-2017.3폴더가 생성된다.
주의할점은 bsp파일의 버전과 petalinux 버전이 동일한게 좋게 아니면 petalinux에서 해당 bsp파일이 지원되는가 확인해 봐야 한다.

특정 프로젝트 명을 가지고 싶으면 -n옵션을 사용하면 된다.
petalinux-create -t project -n [프로젝트이름] --template zynq


$ petalinux-create -t project -n myZynq --template zynq

7. Build를 해보겠다.
$ petalinux-build
빌드가 끝나면 build, images 폴더가 생성되고 images폴더에 사용할 이미지들이 무지 많다. 

2018년 4월 22일 일요일

AXI CDMA with BRAM

목적 : Zynq ZCU102보드를 이용하여 BRAM에 기록되어 있는 데이터를 AXI CDMA를 통해 리눅스의 어플리케이션으로 데이터를 저장하는 방법을 알아보자.

우선 사용자가 poke라는 어플리케이션으로 4k영역에 0x0 ~ 0x3ff 까지 기록하는 방식으로 프로그램을 간단 하게 수정 하고, cdma 드라이버를 로드 하기 전에 4k영역에 데이터를 써 넣는다.
cdma 드라이버가 로드되면 bram에 써 놓은 데이터를 cdma를 통해 어플리케이션으로 가져오는 것을 확인 할 수 있다.

* 드라이버를 로드할때는 poke어플리케이션을 실행 해야 하므로 백그라운드 모드로 실행 하자.

1. Zynq ZCU102를 이용한 하드웨어 디자인

2. 어드레스 정보

3. Bitstream까지 모두 완료되면 FSBL을 만들기 위해 SDK를 실행시켜준다.(File->Export, File->Launch SDK)

4. FSBL까지 완성되면 하드웨어 설정을 petalinux에서 불러와 설정 할 수 있다.
이때 디바이스 트리까지 업데이트 된다. 

5. cdma동작을 위한 드라이버 모듈 만들기
5.1 petalinux사용법에서 보면 나와있듯 드라이버를 만들기 위해 petalinux-create명령을 사용하여 모듈 드라이버를 생성한다.
$ petalinux-create -t modules --name cdma-driver --enable

5.2. 생성된 모듈 폴더로 이동하여 아래 github에서 소스코드를 다운로드 후 빌드를 진행한다.
$ petalinux-build -c cdma-driver

download file.....
https://github.com/pcw1029/zcu102_public/tree/master/cdma/sw/driver/cdma-driver.c

5.3 하드웨어 설정 가져오기
$ petalinux-config --get-hw-description=<sdk path>

6. bram에 4k영역에 데이터를 쓰기위해 xilinx에서 제공하는 어플리케이션인 peekpoke을 사용한다.
6.1 peekpoke을 사용하기 위해서 $petalinux-config -c rootfs 에서 apps항목 중 peekpoke을 선택해야 한다.

6.2 아래 github에 수정된 peekpoke파일이 있다. 
https://github.com/pcw1029/zcu102_public/tree/master/cdma/sw/peekpoke

6.3 수정한 peekpoke을 다시 빌드한다.
$ petalinux-build -c peekpoke -x do_clean && petalinux-build -c peekpoke

7. device-tree에 새로 만들어진  cdma-driver를 추가한다.
추가 위치는 meta-user/recipes-bsp/device-tree/files 아래 system-user.dtsi 파일을 수정하면 된다.
수정 내용
  /include/ "system-conf.dtsi"                 
  / {
      cdmatest_0: cdmatest@0 {
          compatible = "xilinx,cdma-driver";
          dmas = <&axi_cdma_0 0>;
          dma-names = "cdma";
          dma-coherent;
      };
  };

8. 빌드
$ petalinux-build

9. SD카드용 이미지 생성
<project-root path>/images/linux 폴더로 이동 후 아래 명령으로 이미지 파일(BOOT.bin, image.ub)을 생성 후 SD카드로 복사한다.
$ petalinux-package --boot --fsbl <.elf file path> --fpga <.bit file path> --u-boot

실행 결과
1. poke 어플을 이용해 0xa0001000위치에 데이터를 쎃는다.
# poke 0xa0001000 11 1024

2. peek 어플을 이용해 0xa0001000위치에 데이터가 잘 써 있는지 확인 한다.
# peek 0xa0001000 1024

3. 모듈을 올려 가져온 데이터가 2번의 데이터와 일치하는지 확인 한다.
# insmode /lib/modules/4.9.0/extra/cdma-driver.ko test_buf_size=4096


Zturn 리눅스 부팅 모드(QSPI, SD, TFTP, NFS)

목적 : Zturn 보드에서 리눅스 부팅 모드는 QSPI, JTAG, SD Card, Nand Flash가 있다. 이중 Nand Flash는 별도의 보드를 제작해야 가능하고, JTAG는 리눅스 개발보다는 로직을 개발할때 유용할거 같아 QSPI에 포팅하는 방법과 SD 카드로 부팅하는 방법을 살펴보며, 개발 단계에서 많이 사용되고 있는 TFTP환경과 NFS환경에 대해서 보도록 하겠다.

1. SD Card 부팅.
  1.1.  기본적으로 제공되는 Zturn 보드의 부팅모드는 SD Card 부팅모드이며, SD 카드내에 BOOT.Bin, 7z020.bin, devicetreee.dtb, uImage, uramdisk.image.tar.gz uEnv.txt파일들만 존재하면 부팅이 된다.

2. QSPI에 리눅스 부팅하기
  2.1. zturn보드에서는 qspi를 포팅하기 매우 쉽다. 일단 SD Card로 부팅후 환경변수 출력하면(print), qspiupdate가 보이는데 run qspiupdate를 실행하게 되면 자동으로 SD카드에 있는 파일들이 qspi영역으로 올라가게 되며, 파일 로딩이 끝나면, 전원을 끄고, Boot Mode를 qspi로 설정한 후 SD카드를 뽑고 다시 전원을 인가하면 qspi로 올라간 리눅스가 실행되게 된다.

3. TFTP로 리눅스 부팅하기
  3.1.  qspi의 부팅 메시지를 변경하여 tftp로 부팅시 마다 커널과 파일시스템을 가져와서 부팅할수 있다. 변경 방법은 아래와 같다.
환경 변수 설정을 보면 아래와 같이 설정되어있는데
qspiboot=echo Copying Linux from QSPI flash to RAM... && sf probe 0 0 0 && qspi_get_bitsize 0x0A0000 && sf read ${loadbit_addr} 0x0A0004 ${bitsize} && fpga loadb 0 ${loadbit_addr} ${bitsize} && sf read ${kernel_load_address} ${qkernel_addr} ${kernel_size} && sf read ${devicetree_load_address} ${qdevtree_addr} ${devicetree_size} && echo Copying ramdisk... && sf read ${ramdisk_load_address} ${qramdisk_addr} ${ramdisk_size} && bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}

이부분을 tftp로 업로드로 변경할것이다.
변경전에 혹시 모르니 아래와 같이 백업을 해두고
setenv qspiboot_bk 'echo Copying Linux from QSPI flash to RAM... && sf probe 0 0 0 && qspi_get_bitsize 0x0A0000 && sf read ${loadbit_addr} 0x0A0004 ${bitsize} && fpga loadb 0 ${loadbit_addr} ${bitsize} && sf read ${kernel_load_address} ${qkernel_addr} ${kernel_size} && sf read ${devicetree_load_address} ${qdevtree_addr} ${devicetree_size} && echo Copying ramdisk... && sf read ${ramdisk_load_address} ${qramdisk_addr} ${ramdisk_size} && bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}'

아래와 같이 tftp를 적용한걸로 수정한다.
setenv qspiboot 'tftpboot ${kernel_load_address} ${kernel_image} && tftpboot ${devicetree_load_address} ${devicetree_image} && tftpboot ${ramdisk_load_address} ${ramdisk_image} && bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}'

tftp를 사용하기 때문에 당연히 이더넷 케이블이 꽃아있어야 하며, tftp서버 주소 설정이 되어있어야 한다.
tftp 서버 주소는 아래와 같이 설정하면 되고, tftp서버 설정은 인터넷을 통해 검색하기 바란다.
setenv sersverip 192.168.1.82
이렇게 하면 192.168.1.82번의 주소의 서버에서 이미지를 가져온다.
정상적으로 tftp서버에서 이미지를 가져오면 다운로드되는 화면을 콘솔에서 볼수 있다.

Axi-Custom IP를 이용 UART(PL+PS)

목적 : AXI-Custom IP를 이용하여 PL의 GPIO핀를 사용한 UART를 제작한다.

* ZC706에서 GPIO핀을 빼기 힘들기 때문에 Zturn Board(ZC702)를 사용했다.

1. 프로젝트 생성 후 Zynq Block를 추가하고, Ztrun의 Configure를 맞춰준다.
(https://github.com/pcw821029/zturn_Study/tree/master/zturn_basic_tcl 에서 다운)

2. Axi-Lite Custom IP를 제작하기 위해 Tools -> Create and  Package IP... 를 선택하여 사용자 AXI-IP를 제작한다.
2-1

2-2

2-3

2-4

2-5

3.  추가된 Axi-Lite의 코드 추가

4. 추가된 Axi-Lite S_00_AXI.v 의 코드 추가
4-1

4-2

5. uart 기능을 할 코드 생성
5-1

5-2

5-3

5-4

6. File Groups 부터 Packaging까지 순차적으로 수행한다.
6-1

6-2

6-3

6-4

6-5

6-6

6-7 패키징 하기 전에 Tools->Project Settings..에서 Delete project after packaging의 체크박스를 비활성화 시킨다.

6-8

7. 생성된 IP 불러오기

8. 해당 핀들을 자동으로 연결하고,  Zturn 보드의 경우 Address가 0x43C0_0000으로 잡혀있는데 이 영역은 LCD에 뿌려줄 데이터가 기록될 곳이므로 0x4120_0000으로 변경한다.

9. warpper파일을 생성하고, Synthesis까지 수행한다.

10. Run Sysnthesis까지 완료되면 RXD, TXD, RESET핀 맵핑을 하기 위해 open Synthesized Design을 선택하여 핀설정으로 한다.
필자의 경우 J5의 1,2,3핀을 차례데로 1-TXD, 2-RXD, 3-RESET으로 연결 하였다.
J5의 1Pin - T11
J5의 2Pin - U13
J5의 3Pin - T10

11. Implementation 수행, Generate Bitstream까지 수행후 Export H/W 와 Launch SDK를 차례로 수행한다.

12. SDK에서 File->New->Application Project에 Project name을 입력하고 Next를 클릭한다.
12-1

12-2

13. system.mss 파일의 Source탭으로 이동하여 아래와 같이 수정하고 저장한다.
       2.4 -> 2.2

14. system.mss 파일의 Overview탭으로 이동하여 Re-generate BSP Sources를 수행한다.

15. SDK의 Board Support Package의 devicetree로 pl.dtsi파일을 생성하고, 리눅스에서 devicetree을 생성한다.

16. u-boot.elf, fsbl.elf 파일을 사용하여 BOOT.BIN파일 만든다.

17. SD카드에 BOOT.BIN, devicetree.dtb, uImage, 파일을 복사 후 보드에 삽입하여 부팅한다.

18. SerialPortMon이란 무료 어플을 다운로드 후 시리얼 데이터를 전송한다.
결과 화면


2018년 4월 20일 금요일

AXI-Lite Custom IP(PL+SDK APP)

목적 : AXI-Lite Custom IP를 생성하는 방법과 생성된 IP를 통하여 PL과 SDK의 API의 데이터 전송을 하는데 있다.

* ZC706보드의 경우 GPIO핀을 물리적으로 연결하기 힘들기 때문에 Ztrun보드를 가지고 테스트를 진행한다.
* 기본적인 Zynq설정은 ???의 TCL파일을 다운받아 설정한다.

1. 프로젝트 생성시 보드선택은 아래를 참고한다. Zturn Board의 경우 일반적인 설정을 vivado에서 지원해주지 않기때문에 칩셋을 결정하고 zynq의 대한 설정을 맞춰주어야 한다.

2. https://github.com/pcw821029/zturn_Study/tree/master/zturn_basic_tcl 에서 다운받은 TCL파일을 이용해서 ZYNQ7 Processing System의 설정을 맞춰준다.

3. Custom IP를 생성한다.
  a. Tools -> Create and Package New IP 
  b. Next -> Create a new AXI4 Peripheral 선택 후 Next 

  c. (Peripheral Details) Name, Version, Description등을 설정하고 Next

  d. (Add Interfaces) 필요한 부분들을 수정후 Next

  e. Edit IP 선택후 Fisnish하면 새로운 창(edit_simpleMultiplier_v1_0)이 하나 열리게 된다.

4. 생성된 IP의 설정 및 기능을 추가하기
  a. 새로운 창(edit_simpleMultiplier_v1_0)에서 Flow Navigator탭에서 Add Sources를 선택
  b. Add or Create design sources 선택후 Next

  c. Create Files...을 선택

  d. Create Source File 팝업창에서 File Name 과 File location을 맞춰져야 한다.
    ; File location의 경우 Custom IP를 생성하게 되면 ip_repo란 폴더가 생성되는데 이 폴더 안에 있는 simpleMultiplier_1.0폴더 안에 hdl폴더로 Path를 맞춰줘야 한다. 그렇지 않은면 오류가 발생한다. 

  e. finish를 선택하면 Define Mudoule 팝업창이 뜨는데 이는 Input과 output및 필요한 필들을 추가해주면 된다. 이 예제의 경우 두개의 INPUT으로 들어온 데이터를 곱해서 하나의 OUTPUT으로 보내는 기능을 하기때문에 clk, a, b, result 4개의 핀을 추가한다.

5. multiplier의 곱셈기능 하는 코드 추가

6. 생성된 IP의 multiplier의 모듈을 추가 및 수정

- Multiplier의 결과 출력에 정의

7. 새로 추가된 모듈의 패키지의 File Groups Merge

8. Re-Package IP 

9. 생성된 IP 추가

10. Run Connectioni Automation

11. Create HDL Wrapper 에서 부터 bitstream 생성 까지 진행 후 Launch SDK 실행한다.

12. SDK의 Application 코딩
  a. File -> New -> Application Project  Project name 을 입력하고 Next
  b. Available Templates탭에서 Hello World선택 후 Finish
  c. SDK의 Application 코드

13. Boot mode ( JTAG 모드로 설정 )



VITIS Git + Doxygen Config

 Doxygen Configure 1. Vitis 메뉴의 Window->Preference의 C/C++ -> Editor의 Documentation tool comments 기본 설정값을 Doxygen으로 변경 설정 후 함수 바로 위에서 /...