Tricore는 구 Siemens에서 개발한 32비트 마이크로컨트롤러 아키텍처로, 현재는 인피니언 테크놀로지스에서 개발하고 있다. 1999년에 처음 릴리즈되었고, Tricore 아키텍처는 꽤 오래된 기술이다. 이 글에서는 Tricore 아키텍처의 역사에 대해서 살펴볼 거다.
Tricore Architecture - Siemens
2024년 말 기준으로 인피니언에서 RISC-V 기반의 새로운 마이크로컨트롤러가 출시될 예정이라, Tricore는 아마 곧 역사 속으로 사라질 거다.
Tricore 아키텍처는 다음과 같은 특징이 있다.

1. 마이크로컨트롤러와 DSP를 합친 구조로, 고성능 실시간 임베디드 시스템에 적합.
2. 빠른 Task Switching, 효율적인 인터럽트 처리, 고급 언어 컴파일러 지원. (1999년대에는 어셈블리어로 개발하는 마이크로컨트롤러가 많았기 때문에 C 언어 지원 자체가 큰 장점이었음)
3. 큰 용량의 On-Chip 메모리(RAM / ROM / DRAM / OTP / FLASH).
4. 빠른 Peripheral Access, OCDS 지원.
5. RISC-like한 레지스터 모델로 고급 언어 컴파일러 지원.
Tricore의 핵심 구조는 다음과 같다.

CPU Core (ALU, Control Register, GPR)와 Program Cache, RAM / Data Cache, RAM이 Flexible Peripheral Interface Bus로 연결되어 있다.
Tricore의 CPU Core는 프로그램과 데이터 메모리 주소 및 버스가 분리된 하버드 아키텍처를 채택하고 있다. 이 구조 덕분에 instruction fetch와 data access가 병렬로 동시에 수행될 수 있다.
폰 노이만 구조 : 프로그램과 데이터가 메모리를 공유하며, CPU와 메모리 사이에 버스가 하나만 있는 간단한 구조다.
하버드 구조 : 프로그램 메모리와 데이터 메모리가 분리되어 있어, 동시에 두 가지 메모리 접근이 가능해 고속처리가 가능하다.

Tricore는 슈퍼스칼라(SuperScalar) 아키텍처를 채택하여 한 클럭 사이클 내에 여러 명령어를 실행할 수 있도록 설계되었다. Tricore의 슈퍼스칼라 구조는 다음과 같다.
다중 파이프라인 구조
명령어 병렬처리
파이프라인 단계 효율성
FPI Bus Interface는 메모리와 I/O 장치 사이에서 데이터를 주고받기 위해 설계된 데이터 버스다. 칩 안에 있는 각 블록들은 FPI Bus를 통해 연결되어 있다.
(https://velog.velcdn.com/images/lhjoon14/post/5c61fddb-9b86-4706-9d1a-bcf26e0e75b0/image.png)
PCP 모듈은 데이터 이동 및 조작을 위한 CPU 외의 다른 프로그래머블한 Peripheral이다. 이 Co-Processor(GTM/PCP)는 CPU가 개입하지 않고도 데이터를 전송하거나 가져올 수 있어서, CPU의 부하를 줄이고 작업이 끝난 뒤 인터럽트를 통해 Co-Processor들이 일을 분담할 수 있다.
Tricore는 JTAG 인터페이스 외에도 DAP 인터페이스를 통해 고속 Debug가 가능한 프로토콜을 제공한다.

Tricore 아키텍처에는 세 가지 종류의 레지스터가 있다. 이 레지스터들은 프로그램을 실행하면서 데이터를 저장하고 관리하는데 사용된다.
GPRs (General Purpose Registers)
Special Registers

Memory
주소공간

주소 접근 방법
Task: 독립적으로 실행되는 작업의 단위로, 두 가지 유형이 있다.
Task의 권한
Context는 해당 Task의 상태를 정의하고, 실행할 수 있도록 하는 모든 정보를 포함한다.
Tricore는 CSA라는 공간을 사용해 Context를 저장한다. 각 CSA는 16개 Word로 구성된다.
프로그램이 중단되고 새로운 작업을 처리해야 할 때 컨텍스트 스위칭이 일어난다.
Tricore 아키텍처의 중요한 특징 중 하나는 프로그래머블한 SRN(Service Request Node)을 지원한다.
Tricore는 서비스 요청이 발생하면 코드 메모리의 벡터로 점프하여 더 빠르게 실행된다.
ISR은 우선순위를 갖고 있으며, 중첩된 인터럽트가 발생하면 우선순위가 낮은 인터럽트가 중단된다.

Trap은 Non-Maskable Interrupt, 명령어 오류, 잘못된 메모리 접근 등으로 발생하는 이벤트다.
Tricore에서는 다음 8가지 트랩을 분류한다. 각 트랩은 원인에 따라 분류되며, Trap Identifier Number로 구분된다.
Tricore 아키텍처에 대해 간단히 알아봤다. 다음 글에서는 Tricore 개발환경 설정과 CPU Startup 과정을 살펴볼 예정이다.