Ref : Tool Flow Overview — Kria™ KV260 2022.1 documentation (xilinx.github.io)

Software : Vivado 2022.1, Vitis 2022.1

 

Accessing the Tutorial Reference Files

1. Github repository를 다운받아 주세요.

git clone --branch xlnx_rel_v2022.1 --recursive https://github.com/Xilinx/kria-vitis-platforms.git

 

2. 아래는 directory structure입니다.

kria-vitis-platforms
+-- common
+-- kv260
¦ +-- Makefile
¦ +-- overlays 
¦ ¦  +-- dpu_ip 
¦ ¦  +-- examples 
¦ ¦  ¦   +-- aibox-reid
¦ ¦  ¦   +-- defect-detect
¦ ¦  ¦   +-- nlp-smartvision
¦ ¦  ¦   +-- smartcam
¦ ¦  +-- README
¦ ¦  +-- Vitis_Libraries
¦ +-- platforms
¦ ¦  +-- Makefile
¦ ¦  +-- README
¦ ¦  +-- scripts
¦ ¦  +-- vivado
¦ ¦  ¦   +-- kv260_ispMipiRx_rpiMipiRx_DP
¦ ¦  ¦   +-- kv260_ispMipiRx_vcu_DP
¦ ¦  ¦   +-- kv260_ispMipiRx_vmixDP
¦ ¦  ¦   +-- kv260_vcuDecode_vmixDP
+-- README

다운로드 받은 후, kria-vitis-platforms/common/Vitis_Libraries/ directory가 비어있다면, 아래 link를 통해 다운받아주세요.

Xilinx/Vitis_Libraries at c7242de5dde89f2f0f5805be4c2ef5e7d2a323d9 (github.com)

 

Ref : Build Vivado Design — Kria™ KV260 2022.1 documentation (xilinx.github.io)

Generating an Extensible XSA

#$working_dir = kria-vitis-platforms/kv260
export working_dir=~/Vitis-AI/kria-vitis-platforms/kv260
cd $working_dir/platforms/vivado/<platform_name> #working_dir=/install/path/of/kria-vitis-platforms-main/kv260/

 

Application Platform name

smartcam kv260_ispMipiRx_vcu_DP
aibox-reid kv260_vcuDecode_vmixDP
defect-detect kv260_ispMipiRx_vmixDP
nlp-smartvision kv260_ispMipiRx_rpiMipiRx_DP

 

XSA(Xilinx Shell Archive) : Vivado에 의해 생성되어, hardware information을 담고 있는 파일이다. Vitis에서 Embedded software를 개발할 때 필요한 파일입니다.

 

(option) 만약, smartcam 예제의 xsa를 만들고 싶으면, 아래와 같은 명령어를 입력해 주세요.

(이 step은 smartcam의 Vivado design을 바꿨을 때 필요합니다.)

cd $working_dir/platforms/vivado/kv260_ispMipiRx_vcu_DP
make xsa

이 step은 컴퓨터 사양에 따라, 시간이 오래 걸릴 수 있습니다..

 

생성된 XSA파일은 아래 path에 위치할 것입니다.

$working_dir/platforms/vivado/<platform_name>/project/<platform_name>.xsa

 

Modifying the Vivado design and creating a new XSA

Vivado를 열고, Tcl console에서 아래 명령어를 입력해 주세요.

vivado
cd $working_dir/platforms/vivado/<platform_name>
open_project ./project/<platform_name>.xpr

그러면 다음과 같은 화면이 보일 것입니다.

 

IP Integrater category의 Open Block design을 누르자. Processing System(PS)와 PL IP들이 보일 것입니다.

 

이걸 바탕으로, block design을 바꾸고 검증할 수 있다. 검증하려면, Tools->Validate design을 누르면 됩니다.

새로운 XSA file을 생성하고 싶으면, 아래 command를 Vivado tcl console에 입력해 주세요.

write_hw_platform -force -file <platform_name>.xsa

 

이제 생성된 XSA file을 Vitis에서 사용할 수 있습니다.

 

Creating a Vitis Platform

Ref : Build Vitis Platform — Kria™ KV260 2022.1 documentation (xilinx.github.io) 

어떻게 platform안에 accelerator를 넣는지 더 알고 싶다면 UG1393을 참고해 주세요. https://docs.xilinx.com/r/2020.2-English/ug1393-vitis-application-acceleration

 

1. 아래 command를 입력해서 platform을 만들어 주세요.

cd $working_dir #~/kria-vitis-platforms/kv260
make platform PFM=<platform_name>

 

2. 만들어진 platform은 아래 위치에 생성 될 것입니다.

$working_dir/platforms/xilinx_<platform_name>_<version_number>

 

생성된 directory안의 .xfdm file은 Vitis accelerator project를 build할 때 input으로 사용 될 것이다. 이 파일엔 Platform interface들 (Clock, Interrupt, Master AXI, SLave AXI 등)의 정보가 담겨있습니다.

 

Integrate Accelerator Overlay into a Vitis Extensible platform

Ref : Integrate Accelerator Overlay — Kria™ KV260 2022.1 documentation (xilinx.github.io)

1. 아래 command를 입력해서 overlay를 compile하고 platform에 integrate해 주세요.

cd $working_dir #~/kria-vitis-platforms/kv260
make help #여기서 application name 확인
make overlay OVERLAY=<application_name>

(이 step은 컴퓨터 사양에 따라 시간이 오래 걸릴 수 있습니다.)

 

그러면 xclbin파일과 bit파일이 아래 루트에 나올 것입니다.

$working_dir/overlays/examples/<application_name>/binary_container_1/link/int/system.bit   
$working_dir/overlays/examples/<application_name>/binary_container_1/*.xclbin

 

Generation of Firmware binaries

kv260을 부팅하신 후, 아래 command를 실행 해주세요.

git clone --branch xlnx_rel_v2022.1 https://github.com/Xilinx/kria-apps-firmware.git
cd kria-apps-firmware
mkdir -p /kv260/custom #kria-apps-firmware/kv260 아래에 custom폴더를 만들어 주세요.
# ex. kria-apps-firmware/kv260/custom/
mv custom-hardware.bit custom-metadata.xclbin custom-devicetree.dtsi kv260/custom
cp kv260/smartcam/shell.json kv260/custom
make

만약 dtsi파일이 없으시면 kv260/smartcam폴더에서 복사 해주세요.

 

만약 custom model이시라면 아래 tutorial을 따라 dtsi파일을 만들어서 kv260/custom폴더로 copy해주세요.

Example - Generating DTSI and DTBO Overlay Files for Smartcam — Kria™ SOM 2022.1 documentation (xilinx.github.io)

 

그 후 make하시면, kv260의 /lib/firmware/xilinx/kv260-custom/ 폴더 아래에 'dtbo', 'xclbin', 'bin', 'shell.json'파일이 생성되있을 것입니다.

 

그 후 kv260-custom firmware를 올려주세요.

sudo xmutil unloadapp
sudo xmutil listapp
sudo xmutil loadapp kv260-custom

 

sudo xmutil listapp시, slot이 '0'이면 펌웨어가 잘 올라가 있는 상태입니다.

 

각자의 test용 동영상과 xinfer에 필요한 json파일을 준비 해주세요.

 

그 후 아래 명령어로 docker command를 실행해주세요.

docker run \
--env="DISPLAY" \
-h "xlnx-docker" \
--env="XDG_SESSION_TYPE" \
--net=host \
--privileged \
--volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
-v /tmp:/tmp \
-v /dev:/dev \
-v /sys:/sys \
-v /etc/vart.conf:/etc/vart.conf \
-v /lib/firmware/xilinx:/lib/firmware/xilinx \
-v /run:/run \
-it xilinx/smartcam:2022.1 bash

 

그 후 아래와 같은 vvas pipeline을 실행해 주세요.

gst-launch-1.0 -v filesrc location=/tmp/all5_720p.mp4  \
! qtdemux ! h264parse ! omxh264dec internal-entropy-buffers=2 ! queue \
! vvas_xinfer preprocess-config=fd_preprocess_cfg.json infer-config=fd_inference_cfg.json name=infer1
! filesink location=./out_fd.h264 -v

 

그 후 docker에서 나온 후 (command : exit) ffmpeg를 통해 output을 mp4로 변환해주세요.

ffmpeg -framerate 24 -i /tmp/out_fd.h264 -c copy output.mp4

 

그리고 재생 해서 결과를 test해보시면 끝입니다.

 

 

++Known error

Known error 1. make overlay중에 다음과 같은 에러를 만나면 아래 github link를 /kria-vitis-platfrom-main/common/ 아래 다운로드 해주세요.

Xilinx/Vitis_Libraries at c7242de5dde89f2f0f5805be4c2ef5e7d2a323d9 (github.com)

 

Known error 2. 만약 make overlay과정에서 timing error가 나오면 Vivado version과 Vitis version을 다른 것을 쓰고 계실 가능성이 있습니다. 두 개의 버전을 2022.1로 맞춰주세요.

===>The following messages were generated while  Compiling (bitstream) accelerator binary: dpu Log file: /home/seungjoy/kria-vitis-platforms/kv260/overlays/examples/smartcam/bina
ry_container_1/link/vivado/vpl/prj/prj.runs/impl_1/runme.log  :                                                                                                                   
ERROR: [VPL 101-2] design did not meet timing - Design failed to meet timing.                                                                                                     
    Failed timing checks (paths):                                                                                                                                                 
        {kv260_ispMipiRx_vcu_DP_i/DPUCZDX8G_1/inst/dpu_xrt_i/dpu_wrapper/m_dpu_top/m_buf_writer/dm_write_ctrl/cm_buf_wctrl_augm/state_machines[0].is_in_chs_tail_reg/C --> kv260_i
spMipiRx_vcu_DP_i/DPUCZDX8G_1/inst/dpu_xrt_i/dpu_wrapper/m_dpu_top/m_buf_writer/dm_write_ctrl/cm_buf_wctrl_augm/state_machines[0].is_in_chs_tail_reg/D}                           
                                                                                                                                                                                  
    Please check the routed checkpoint (dr_routed_timing.dcp) and timing summary report (dr_timing_summary.rpt) for more information.                                             
ERROR: [VPL 101-3] sourcing script /home/seungjoy/kria-vitis-platforms/kv260/overlays/examples/smartcam/binary_container_1/link/vivado/vpl/scripts/impl_1/_full_write_bitstream_pr
e.tcl failed                                                                                                                                                                      
ERROR: [VPL 60-773] In '/home/seungjoy/kria-vitis-platforms/kv260/overlays/examples/smartcam/binary_container_1/link/vivado/vpl/runme.log', caught Tcl error:  problem implementin
g dynamic region, impl_1: write_bitstream ERROR, please look at the run log file '/home/seungjoy/kria-vitis-platforms/kv260/overlays/examples/smartcam/binary_container_1/link/viv
ado/vpl/prj/prj.runs/impl_1/runme.log' for more information                                                                                                                       
WARNING: [VPL 60-732] Link warning: No monitor points found for BD automation.                                                                                                    
ERROR: [VPL 60-704] Integration error, problem implementing dynamic region, impl_1: write_bitstream ERROR, please look at the run log file '/home/seungjoy/kria-vitis-platforms/kv
260/overlays/examples/smartcam/binary_container_1/link/vivado/vpl/prj/prj.runs/impl_1/runme.log' for more information                                                             
ERROR: [VPL 60-1328] Vpl run 'vpl' failed                                                                                                                                         
ERROR: [VPL 60-806] Failed to finish platform linker                                                                                                                              
INFO: [v++ 60-1442] [20:20:02] Run run_link: Step vpl: Failed                                                                                                                     
Time (s): cpu = 00:01:28 ; elapsed = 02:57:57 . Memory (MB): peak = 447.703 ; gain = 0.000 ; free physical = 21067 ; free virtual = 712640                                        
ERROR: [v++ 60-661] v++ link run 'run_link' failed                                                                                                                                
ERROR: [v++ 60-626] Kernel link failed to complete                                                                                                                                
ERROR: [v++ 60-703] Failed to finish linking                                                                                                                                      
INFO: [v++ 60-1653] Closing dispatch client.                                                                                                                                      
make[1]: *** [Makefile:75: binary_container_1/dpu.xclbin] Error 1                                                                                                                 
make[1]: Leaving directory '/home/seungjoy/kria-vitis-platforms/kv260/overlays/examples/smartcam'                                                                                 
make: *** [Makefile:61: overlays/examples/smartcam/binary_container_1/link/int/system.bit] Error 2

 

Known error 3. 아래 에러는 input video file의 크기가 0일 때 발생합니다.

 

Known error 4. vvas 실행 시, 아래와 같은 에러가 나오면 json file path를 check해주세요.

 

Known error 5. : what():  Failed to open file '/lib/firmware/xilinx/kv260-smartcam/kv260-smartcam.xclbin' for reading

Setting pipeline to PAUSED ...
terminate called after throwing an instance of 'std::runtime_error
what():  Failed to open file '/lib/firmware/xilinx/kv260-smartcam/kv260-smartcam.xclbin' for reading
Aborted (core dumped)

이 에러가 나오면 /lib/firmware/xilinx/에 가서 원래 있던 'kv260-smartcam' directory를 지우고, custom firmware directory를 kv260-smartcam으로 바꿔주세요.

cd /lib/firmware/xilinx/
sudo mv kv260-custom/ kv260-smartcam
sudo xmutil unloadapp
sudo rm -rf /etc/vart.conf/ #https://xilinx.github.io/kria-apps-docs/faq/build/html/docs/faq.html
sudo xmutil loadapp kv260-smartcam
sudo xmutil listapps

#start docker
#start your vvas pipeline

+ Recent posts