Delfino 개발보드 예제 (F28335)
[실습예제] Delfion EVM - Profile, 내부램/내부플래시/외부램 속도비교
1. 실습 목적
TMS320F28335 칩과 CCS의 Profile 기능을 이용하여, TMS320F28X 계열의 내부 램 영역과 내부 플래시 영역, 외부 램 영역들에서 각각 동일한 코드를 실행시켰을때의 속도 차이를 확인해봅니다.
2. 실습 준비
예제를 실습하기 위해서 아래와 같은 개발환경이 필요합니다.
A. 실습 장비
1) CCSv3.3(SR12)이나 CCSv4.2.x 이상 / CCS v5.2.x 이상이 설치된 PC
2) Delfino 개발보드(옵션)과 TMS320F28335 초소형 메모리 모듈
- 본 실습은 Delfino 개발보드 없이, TMS320F28335 초소형 메모리 모듈만으로도 진행이 가능합니다.
- TMS320F28335 초소형 버스 모듈의 경우, 외부 램 예제(3번, 5번)들은 실습하실 수 없습니다.
B. 실습 예제
1) TIDCS_DSP2833x.exe를 PC에 설치합니다.
>> TIDCS_DSP2833x.zip (다운로드) ← Click
2) (통합) Profile 실습예제들을 PC에 설치합니다.
>> PROFILE_Examples.zip (예제 전체 통합 설치) ← Click
3) (CCSv3.3 SR12 사용자) Profile 실습예제들을 PC에 설치합니다.
>> PROFILE01_CCSv3.3.zip (1번 - 내부 램 영역) ← Click
>> PROFILE02_CCSv3.3.zip (2번 - 내부 플래시 영역) ← Click
>> PROFILE03_CCSv3.3.zip (3번 - 외부 램 영역) ← Click
>> PROFILE04_CCSv3.3.zip (4번 - 내부 플래시 영역 + 최적화) ← Click
>> PROFILE05_CCSv3.3.zip (5번 - 외부 램 영역 + 최적화) ← Click
4) (CCSv4.2.4.00033 이상 사용자) Profile 실습예제들을 PC에 설치합니다.
>> PROFILE01_CCSv4.x.zip (1번 - 내부 램 영역) ← Click
>> PROFILE02_CCSv4.x.zip (2번 - 내부 플래시 영역) ← Click
>> PROFILE03_CCSv4.x.zip (3번 - 외부 램 영역) ← Click
>> PROFILE04_CCSv4.x.zip (4번 - 내부 플래시 영역 + 최적화) ← Click
>> PROFILE05_CCSv4.x.zip (5번 - 외부 램 영역 + 최적화) ← Click
5) (CCSv5.3.0.00090 이상 사용자) Profile 실습예제들을 PC에 설치합니다.
>> PROFILE01_CCSv5.x.zip (1번 - 내부 램 영역) ← Click
>> PROFILE02_CCSv5.x.zip (2번 - 내부 플래시 영역) ← Click
>> PROFILE03_CCSv5.x.zip (3번 - 외부 램 영역) ← Click
>> PROFILE04_CCSv5.x.zip (4번 - 내부 플래시 영역 + 최적화) ← Click
>> PROFILE05_CCSv5.x.zip (5번 - 외부 램 영역 + 최적화) ← Click
3. 실습해 보기
* 하기 설명은 CCS V5.3.0.00090 버전을 기준으로 예제 1번의 실행과정을 설명하고 있습니다.
Step 1). Code Composer Studio를 실행하고, Profile 예제들을 불러들입니다.
Step 2). 사용중인 JTAG 에뮬레이터 및 프로세서를 설정합니다.(Target Configuration)
Step 3). 예제 프로젝트를 Build 하고, 설정한 Target Configuration으로 Debug Session을 엽니다.
Step 4). CCS와 Target을 연결(Connect)하고, Build 한 결과파일(*.out)을 칩에 Load 합니다.
Step 5). Profiling을 위해, CCS 상단메뉴 Run -> Clock -> Enable을 클릭합니다.
Step 6). CCS 화면 하단의 상태 바에 노란색 시계모양 아이콘과 숫자가 나타나는지 확인합니다. (나타나지 않는다면, Run -> Clock -> Show 클릭)
Step 7). 아래의 그림을 참조하여, Idle-loop 내의 Sine, Cosine 계산용 for loop 시작점에 Breakpoint를 설정합니다.

Step 8). CCS 상단메뉴 Run -> Reset -> Reset CPU를 클릭하여, 프로세서를 Reset 합니다.
Step 9). CCS 상단메뉴 Run -> Resume을 클릭하여, 예제를 실행시킵니다.
Step 10). 과정 7에서 설정한 Breakpoint에서 프로그램이 멈춤을 확인합니다.
Step 11). CCS 화면 하단 상태 바의 노란색 시계모양 아이콘과 그 옆의 숫자를 확인합니다. (시계모양 아이콘 옆의 숫자는 프로그램 시작부터 Breakpoint까지 CPU가 소비한 Cycle 수를 의미합니다.)
Step 12). 시계모양 아이콘 옆의 숫자를 마우스 좌측버튼으로 더블클릭하여, 숫자를 다시 "0"으로 초기화 합니다.
Step 13). 과정 7에서 설정한 Breakpoint를 해제하고, Sine, Cosine 계산용 for loop 바로 아래에 위치한 "BackTicker++;" 코드에 새로운 Breakpoint를 설정합니다.

Step 14). CCS 상단메뉴 Run -> Resume을 클릭하여, 예제를 다시 실행시킵니다.
Step 15). 과정 13에서 새로 설정한 Breakpoint에서 프로그램이 멈춤을 확인합니다.
Step 16). CCS 화면 하단 상태 바의 노란색 시계모양 아이콘과 그 옆의 숫자를 확인합니다. (시계모양 아이콘 옆의 숫자는 for loop 시작부터 "BackTicker++;" 코드가 실행되기 전까지 CPU가 소비한 Cycle 수를 의미합니다. 즉, Sine, Cosine 계산을 위한 for loop를 실행하는데 CPU가 소비한 Cycle 수가 됩니다.)
Step 17). 확인된 CPU Cycle 수를 시간(초)으로 환산해봅니다. (예제의 CPU Clock 설정 = 150MHz, 6.67nec / 예, 150,007 Cycle x 6.67nsec = 약 1msec)
Step 18). 유사한 방법으로 나머지 예제들을 실습해보고, 내부 램 영역과 내부 플래시, 외부 램에서 동일한 코드를 실행했을때, CPU Cycle 수가 어떻게 달라지는지 확인해봅니다.
참고) 외부 램 영역에서 코드를 실행하는 3번, 5번 예제의 경우, 외부 램 영역에서 코드를 실행해야 하므로 프로그램 Load 전 기본 GPIO 상태인 외부 메모리 회로 및 관련 인터페이스 포트들을 적절하게 초기화 해야 합니다. 이를 위해 기본 GEL 스크립트 파일(f28335.gel)의 XINTF_Enable( )를 수정해야 하며, 미리 수정된 예시는 예제 3번, 5번 폴더 안에 포함(f28335_XRAM_Example.gel)되어 있습니다. 반드시, 예제 프로그램을 Load 하기 전 수정된 GEL 스크립트 파일을 적용하고, CCS 상단 Script 메뉴에서 XINTF_Enable 루틴을 실행해줘야 합니다.

4. 결과 정리
예제 1번, 2번, 3번은 각각 TMS320F28X 칩의 내부 램 영역, 내부 플래시 영역, 외부 램 영역에서 동일한 코드를 수행하는 예제이며, 칩의 Reset 후 초기 설정을 변경하지 않습니다. 그 결과를 종합해보면 아래와 같습니다. (Compiler 버전에 따라, 숫자가 다소 상이할 수 있습니다.)
>> 내부 램 영역 코드 실행 : 150,007 Cycles
>> 내부 플래시 영역 코드 실행 : 1,568,000 Cycles
>> 외부 램 영역 코드 실행 : 5,488,057 Cycles
예제 4번은 TI가 제공하는 InitFlash( ) 함수를 이용하여, 내부 플래시 영역의 Pipeline을 활성화하고, 초기 가장 느리게 설정되어 있는 내부 플래시 메모리 Wait-state를 최적화 한 결과입니다.
>> 내부 플래시 영역 코드 실행 (플래시 메모리 최적화) : 338,998 Cycles
예제 5번은 TMS320F28335 초소형 메모리 모듈에 장착된 SRAM - IS61WV25616BLL-10BLI의 Datasheet에서 Access Timing을 참고하여, 초기 가장 느리게 설정되어 있는 외부 메모리 인터페이스 Wait-state를 최적화 한 결과입니다.
>> 외부 램 영역 코드 실행 (EMIF 최적화) : 412,000 Cycles
결과를 종합하여, 동일한 코드 실행에 있어 속도 순으로 각 메모리 영역을 나열하면 아래와 같음을 알 수 있습니다.
* 내부 램 > 내부 플래시 > 외부 램
| 번호 | 제목 | 작성자 | 날짜 |
|---|
- 1




