Tool 정보 : ccsv9
Board 정보 : EVM C6678
사용 라이브러리 및 Products :
Products : c667x PDK(2.0.16), SYS/BIOS (6.76.3.01), EDMA3 Low Level Driver
Tool 정보 : ccsv9
Board 정보 : EVM C6678
Products : c667x PDK(2.0.16), SYS/BIOS (6.76.3.01), EDMA3 Low Level Driver
PDK에는 모든 PDK 하위 구성 요소에 대한 예제를 만들고 CCS 프로젝트를 테스트하는 데 사용되는 Windows 스크립트가 포함되어 있습니다. 다음 단계에서는 스크립트를 사용하여 CCS 프로젝트 콘텐츠를 만드는 방법을 설명합니다.
우선 gmake를 사용할수 있도록 설정해야 합니다. gmake는 xdctools의 있습니다.
제어판 -> 시스템 -> 고급 시스템 설정 -> 환경변수 -> 시스템 변수 중 Path를 편집을 이용하여 gmake Path를 추가합니다.
c:\ti\pdk_c667x_2_0_16\packages> pdkProjectCreate.bat C6678 all little all example dsp
실행이 완료되면 MyExampleProjects폴더가 만들어집니다.
Introduction
이 백서는 TI의 TMS320C6678 8 코어 고정형 DSP 코어의 1, 2, 4 및 8 DSP 코어에서 16K ~ 1024K 샘플 크기의 1 차원 복합 단 정밀도 부동 소수점 FFT를 구현하는 초대형 FFT (VLFFT) 데모에 대해 설명합니다. C66x DSP 코어의 기능과 추가 된 코어 수에 비례하는 성능 향상을 통해 여러 코어에 걸친 병렬화를 수용하는 아키텍처의 기능을 보여주기위한 부동 소수점 DSP. FFT는 의료 영상, 통신, 군사 및 상업용 레이더, 전자전 (재머, 안티 재머)과 같은 애플리케이션에 사용되는 일반적인 신호 처리 빌딩 블록이므로이 데모의 알고리즘으로 FFT가 선택되었습니다. 1024K 샘플 FFT는 알고리즘이 1GHz에서 TMS320C6678 장치의 8 개 DSP 코어 모두에서 실행될 때 6.4ms에 불과한 것으로 나타났습니다.
TMS320C6678 SoC
TMS320C6678 장치는 TI의 C66x 고정 및 부동 소수점 DSP 코어를 기반으로하는 8 코어 DSP이며 완전한 멀티 코어 권한을 지원하는 TI의 혁신적인 KeyStone ™ 아키텍처를 기반으로합니다.
최대 1.25GHz에서 작동 할 수 있으며이 속도에서 160GFLOPS를 생성 할 수 있으며 일반적인 사용 사례에서 10W 미만을 소비합니다. 또한 DSP 코어 당 512KB의 L2 메모리와 총 8MB의 온칩 메모리를위한 4MB의 공유 메모리가 있으며 모두 ECC를 사용합니다. DDR3 인터페이스는 최대 1600MTPS를 실행할 수 있으며 최대 8GB의 외부 메모리에 액세스 할 수 있으며 64 비트 + 8 비트 ECC 인터페이스입니다. 주변 장치에는 PCIe, Serial RapidIO® 및 기가비트 이더넷, 타사 IP 블록을 통해 FPGA뿐만 아니라 다른 TI DSP, ARM® 및 ARM + DSP 프로세서에 최대 50Gbps 연결을 제공하는 TI의 HyperLink 인터페이스가 포함됩니다. .
VLFFT 데모에서 TMS320C6678 장치는 1333MHz에서 DDR3 전송을 사용하여 1GHz에서 작동합니다.
VLFFT 데모
VLFFT 알고리즘을 사용하려면 입력 데이터를 장치의 외부 메모리에 배치해야합니다. 데모 중에 데이터는 DSP 코어에 의해 액세스, 배포 및 처리 된 다음 출력이 외부 메모리에 배치됩니다. 측정 된주기 수와 시간은이 전체 프로세스를 포함합니다. 다음 크기의 FFT에서 계산을 수행하기 위해 다른 수의 코어 (1, 2, 4 또는 8)를 사용하도록 소프트웨어를 구성 할 수 있습니다.
• 16K
• 32K
• 64K
• 128K
• 256K
• 512K
• 1024K
FFT 구현은 계산 부하를 여러 코어에 분산하고 C66x DSP 코어의 고성능 계산 능력을 완전히 활용하여 최대 성능을 달성하도록 설계되었습니다. 기본적인 데시 메이션-인-타임 접근법은 1 차원 매우 큰 FFT 계산을 2 차원 FFT 계산과 유사한 형태로 공식화하는 데 사용됩니다.
매우 큰 N의 경우 N = N1 * N2로 계수 될 수 있습니다. 크기가 매우 큰 경우 1 차원 입력 배열을 N1 행과 N2 열의 2 차원 배열로 나타낼 수 있으며 다음 단계를 수행하여이 표현에서 매우 큰 1 차원 FFT를 계산할 수 있습니다.
1. 열 방향에서 N1 크기의 N2 FFT 계산
2. 회전 계수로 곱하기
3. N1 크기의 N2 FFT를 행 방향으로 저장하여 N2 x N1 2 차원 배열을 형성합니다.
4. N2 크기의 N1 FFT를 열 방향으로 계산
5. 데이터를 열 방향으로 저장하여 N2 x N1 2 차원 배열 형성
이 알고리즘은 Takahashi가 "Hitachi SR8000 용 고성능 병렬 FFT 알고리즘"에서 자세히 설명합니다. [1] 멀티 코어 구현에서 1 단계는 각 코어에서 N1 크기의 N2 / (코어 수) FFT를 계산하여 수행됩니다. 각 코어에서 N1 / (코어 수) 크기 N2의 FFT를 계산하여 4 단계. 코어 0은 마스터 코어로 사용되며 모든 코어를 동기화하고 나머지 코어는 슬레이브 코어로 사용됩니다. 각 코어에서 N1 및 N2의 크기에 따라 각 코어의 총 FFT 수는 코어 당 L2 SRAM의 크기를 수용하기 위해 여러 개의 작은 블록으로 나뉩니다. 각 데이터 블록은 DMA에 의해 외부 메모리에서 L2 SRAM으로 프리 페치되고 FFT 결과는 DDR에 의해 외부 메모리에 다시 기록됩니다. 각 코어는 2 개의 DMA 채널을 사용하여 외부 메모리 (DDR3)와 내부 메모리 (L2 SRAM)간에 입력 및 출력 샘플을 전송합니다.
Tool 정보 : ccsv9
Board 정보 : EVM C6678
keystone 인터럽트 관련 참고 사이트 :
https://processors.wiki.ti.com/index.php/Configuring_Interrupts_on_Keystone_Devices
gpio 관련 문서 : https://www.ti.com/lit/ug/sprugv1/sprugv1.pdf
TEST_PH1(80PIN)
GPIO Memory Map Address :
Start : 0x02320000
End : 0x023200FF
SIZE : 256
GPIO0 ~ GPIO15
인터럽트로 사용 GPIO -> GPIO14, GPIO15
Products : c667x PDK(2.0.16), SYS/BIOS (6.76.3.01)
C:\ti\pdk_c667x_2_0_16\packages\ti\platform\evmc6678l\platform_lib\lib\debug\ti.platform.evm6678l.lite.lib
C:\ti\pdk_c667x_2_0_16\packages\ti\csl\lib\c6678\c66\release\ti.csl.ae66
C:\ti\pdk_c667x_2_0_16\packages\ti\csl\lib\c6678\c66\release\ti.csl.intc.ae66
GPIO#13번핀을 인터럽트 신호 발생원으로 사용하고 GPIO#14, #15번을 각각 인터럽트핀으로 사용한다.
GPIO#13은 Clock함수를 이용하여 일정 주기(100msec)마다 인터럽트를 발생하고 발생된 인터럽트는 EventCombiner를 거쳐 Hwi인터럽트 설정 함수를 호출하여 인터럽트 처리를 한다.
인터럽트 처리는 Global변수를 증가하여 인터럽트 발생횟수를 확인한다.
https://github.com/pcw1029/tms320C6678/tree/main/gpioInterrupt
TMS320C6678문서에 따르면 인터럽트 Event Number를 보면 GPIO핀은 GPIO8 ~ GPIO15을 인터럽트 사용할수 있으며, 이벤트번호 82 ~ 89까지 맵핑되어 있다.
petalinux-config 명령을 통해 user layer 0에 위치를 설정한다.Yocto Settings --->User Layers --->( ) user layer 0
# We have a conf and classes directory, add to BBPATH BBPATH .= ":${LAYERDIR}" # We have recipes-* directories, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_COLLECTIONS += "libcalculator" BBFILE_PATTERN_libcalculator = "^${LAYERDIR}/" BBFILE_PRIORITY_libcalculator = "6"
# # This file was derived from the 'libcalculator!' example recipe in the # Yocto Project Development Manual. # DESCRIPTION = "Simple libcalculator application" SECTION = "libs" DEPENDS = "" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://LICENSE;md5=96af5705d6f64a88e035781ef00e98a8" # This tells bitbake where to find the files we're providing on the local filesystem FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:" # Use local tarball SRC_URI = "file://libcalculator-${PV}.tar.gz" # Make sure our source directory (for the build) matches the directory structure in the tarball S = "${WORKDIR}/libcalculator-${PV}" PACKAGE_ARCH = "${MACHINE_ARCH}" PROVIDES = "calculator" TARGET_CC_ARCH += "${LDFLAGS}" do_install() { install -d ${D}${libdir} install -d ${D}${includedir} oe_libinstall -so libcalculator ${D}${libdir} install -d -m 0655 ${D}${includedir}/CALCULATOR install -m 0644 ${S}/*.h ${D}${includedir}/CALCULATOR/ } FILES_${PN} = "${libdir}/*.so.* ${includedir}/*" FILES_${PN}-dev = "${libdir}/*.so"
The MIT License (MIT) Copyright (c) 2014 Dynamic Devices Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
APP = calculator LIBSOURCES=*.c OUTS = *.o NAME := calculator MAJOR = 1.0 MINOR = 1 VERSION = $(MAJOR).$(MINOR) all: lib$(NAME).so lib$(NAME).so.$(VERSION): $(OUTS) $(CC) $(LDFLAGS) $(OUTS) -shared -Wl,-soname,lib$(NAME).so.$(MAJOR) -o lib$(NAME).so.$(VERSION) lib$(NAME).so: lib$(NAME).so.$(VERSION) rm -f lib$(NAME).so.$(MAJOR) lib$(NAME).so ln -s lib$(NAME).so.$(VERSION) lib$(NAME).so.$(MAJOR) ln -s lib$(NAME).so.$(MAJOR) lib$(NAME).so %.o: %.c $(CC) $(CFLAGS) -c -fPIC $(LIBSOURCES) clean: rm -rf *.o *.so *.so.*
/* * add.c * * Created on: 2020. 8. 13. * Author: pcw1029 */ #include "add.h" int add(int val1, int val2) { return val1+val2; }
/* * add.h * * Created on: 2020. 8. 13. * Author: pcw1029 */ #ifndef ADD_H_ #define ADD_H_ int add(int val1, int val2); #endif /* ADD_H_ */
#Note: Mention Each package in individual line # cascaded representation with line breaks are not valid in this file. IMAGE_INSTALL_append = " peekpoke" IMAGE_INSTALL_append = " gpio-demo" IMAGE_INSTALL_append = " libcalculator"
Doxygen Configure 1. Vitis 메뉴의 Window->Preference의 C/C++ -> Editor의 Documentation tool comments 기본 설정값을 Doxygen으로 변경 설정 후 함수 바로 위에서 /...