니오스 II

**니오스 II**(Nios II)는 알테라 계열의 필드 프로그래머블 게이트 어레이 (집적 회로)용으로 특별히 설계된 32비트 임베디드 프로세서 아키텍처이다. 니오스 II는 원래 니오스 아키텍처에 비해 많은 개선 사항이 통합되어 디지털 신호 처리(DSP)부터 시스템 제어에 이르는 광범위한 임베디드 컴퓨팅 애플리케이션에 더 적합하다.

니오스 II는 알테라의 첫 번째 구성 가능한 16비트 임베디드 프로세서인 2000년에 출시된 니오스의 후속작이다.

인텔은 2023년에 니오스 II의 단종을 발표했으며, 그 후속작은 RISC-V 아키텍처를 기반으로 하는 니오스 V이다.

## 주요 기능
원래의 니오스와 마찬가지로 니오스 II 아키텍처는 알테라 FPGA의 프로그래머블 로직 및 메모리 블록에 완전히 구현된 RISC 소프트 코어 아키텍처이다. 이전 버전과 달리 완전한 32비트 설계이다.

* 32개의 범용 32비트 레지스터
* 완전한 32비트 명령어 집합, 데이터 경로 및 주소 공간
* 단일 명령어 32 × 32 곱셈 및 나눗셈으로 32비트 결과 생성

니오스 II 프로세서의 소프트 코어 특성 덕분에 시스템 설계자는 특정 애플리케이션 요구 사항에 맞춰 사용자 지정 니오스 II 코어를 지정하고 생성할 수 있다. 시스템 설계자는 미리 정의된 메모리 관리 장치를 추가하거나 사용자 지정 명령어 및 사용자 지정 주변 장치를 정의하여 니오스 II의 기본 기능을 확장할 수 있다.

### 사용자 지정 명령어
기본 니오스 II 명령어와 유사하게 사용자 정의 명령어는 최대 두 개의 32-비트 소스 레지스터에서 값을 받아 선택적으로 32비트 대상 레지스터에 결과를 다시 쓴다. 사용자 지정 명령어를 사용함으로써 시스템 설계자는 성능 목표를 충족하도록 시스템 하드웨어를 미세 조정할 수 있으며, 설계자는 C에서 명령어를 매크로로 쉽게 처리할 수 있다.

### 사용자 지정 주변 장치
CPU 사이클 대부분을 특정 코드 섹션 실행에 사용하는 성능에 민감한 시스템의 경우, 사용자 정의 주변 장치가 소프트웨어 알고리즘 실행의 일부 또는 전부를 사용자 정의 하드웨어 논리로 오프로드하여 전력 효율성 또는 애플리케이션 처리량을 향상시킬 수 있다.

### 메모리 관리 장치
쿼터스 8.0과 함께 도입된 선택적 MMU를 통해 니오스 II는 리눅스 커널과 같이 하드웨어 기반 페이징 및 보호를 요구하는 운영 체제를 실행할 수 있다. MMU가 없으면 니오스는 μClinux 및 FreeRTOS와 같이 단순화된 보호 및 가상 메모리 모델을 사용하는 운영 체제로 제한된다.

### 메모리 보호 장치
쿼터스 8.0과 함께 도입된 선택적 MPU는 MMU에서 제공하는 것과 유사한 메모리 보호 기능을 제공하지만, 더 간단한 프로그래밍 모델과 MMU와 관련된 성능 오버헤드가 없다.

## 니오스 II CPU 제품군
니오스 II 클래식은 니오스 II/f (고속), 니오스 II/s (표준), 니오스 II/e (절전)의 3가지 구성으로 제공된다.
니오스 II gen2는 니오스 II/f (고속) 및 니오스 II/e (절전)의 2가지 구성으로 제공된다.

### 니오스 II/f
니오스 II/f 코어는 코어 크기를 희생하면서도 최대 성능을 위해 설계되었다. 니오스 II/f의 기능은 다음과 같다.
* 별도의 명령어 및 데이터 캐시 (512&nbsp;B ~ 64&nbsp;KB)
* 선택적 MMU 또는 MPU
* 최대 2&nbsp;GB의 외부 주소 공간 액세스
* 명령어 및 데이터를 위한 선택적 긴밀 결합 메모리
* 최대 DMIPS/MHz를 달성하기 위한 6단계 파이프라인
* 단일 사이클 하드웨어 곱셈 및 배럴 시프터
* 선택적 하드웨어 나눗셈 옵션
* 동적 분기 예측
* 최대 256개의 사용자 지정 명령어 및 무제한 하드웨어 가속기
* JTAG 디버그 모듈
* 하드웨어 중단점, 데이터 트리거 및 실시간 추적을 포함한 선택적 JTAG 디버그 모듈 향상 기능

### 니오스 II/s
니오스 II/s 코어는 성능과 비용 간의 균형을 유지하도록 설계되었다. 이 코어 구현은 알테라 쿼터스 II v.17 이상에서는 더 이상 지원되지 않는다. 니오스 II/s의 기능은 다음과 같다.
* 명령어 캐시
* 최대 2&nbsp;GB의 외부 주소 공간
* 명령어를 위한 선택적 긴밀 결합 메모리
* 5단계 파이프라인
* 정적 분기 예측
* 하드웨어 곱셈, 나눗셈 및 시프트 옵션
* 최대 256개의 사용자 지정 명령어
* JTAG 디버그 모듈
* 하드웨어 중단점, 데이터 트리거 및 실시간 추적을 포함한 선택적 JTAG 디버그 모듈 향상 기능

### 니오스 II/e
니오스 II/e 코어는 FPGA의 가능한 가장 작은 논리 활용을 위해 설계되었다. 이는 저비용 사이클론 II FPGA 애플리케이션에 특히 효율적이다. 니오스 II/e의 기능은 다음과 같다.
* 최대 2&nbsp;GB의 외부 주소 공간
* JTAG 디버그 모듈
* 700개 미만의 LE로 완전한 시스템 구현
* 선택적 디버그 향상 기능
* 최대 256개의 사용자 지정 명령어
* 무료, 라이선스 불필요

## 아발론 스위치 패브릭 인터페이스

니오스 II는 아발론 스위치 패브릭을 임베디드 주변 장치에 대한 인터페이스로 사용한다. 프로세서 기반 시스템의 전통적인 버스는 한 번에 하나의 버스 마스터만 버스에 액세스할 수 있도록 하는 반면, 아발론 스위치 패브릭은 슬레이브 측 중재 방식을 사용하여 여러 마스터가 동시에 작동할 수 있도록 한다.

## 개발 프로세스
니오스 II 개발은 하드웨어 생성과 소프트웨어 생성이라는 두 가지 별도의 단계로 구성된다.

개발은 알테라 애플리케이션인 EDS(Embedded Design Suite) 내에서 호스팅된다. EDS는 두 가지 별도의 단계에서 하드웨어와 소프트웨어를 모두 관리하는 완전한 통합 개발 환경을 포함한다.

### 하드웨어 생성 프로세스
니오스 II 하드웨어 설계자는 쿼터스 II 패키지의 구성 요소인 Qsys 시스템 통합 도구를 사용하여 니오스 시스템을 구성하고 생성한다. 구성 그래픽 사용자 인터페이스(GUI)를 통해 사용자는 니오스 II의 기능 집합을 선택하고 주변 장치 및 I/O 블록(타이머, 메모리 컨트롤러, 직렬 인터페이스 등)을 임베디드 시스템에 추가할 수 있다. 하드웨어 사양이 완료되면 쿼터스 II는 합성, 배치 및 배선을 수행하여 선택한 FPGA 대상에 전체 시스템을 구현한다.
Qsys는 니오스 II 시스템을 구축하는 데 사용될 수 있었던 이전 SOPC(System-on-a-Programmable-Chip) 빌더를 대체하고 있으며, 새로운 프로젝트에 권장되고 있다.

### 소프트웨어 생성 프로세스
EDS(Embedded Design Suite)라고 불리는 별도의 패키지가 소프트웨어 개발을 관리한다. 이클립스 IDE를 기반으로 하는 EDS는 C/C++ 컴파일러(GNU 툴체인 기반), 디버거 및 명령어 세트 시뮬레이터를 포함한다. EDS를 통해 프로그래머는 시뮬레이션에서 애플리케이션을 테스트하거나 컴파일된 애플리케이션을 실제 FPGA 호스트에 다운로드하여 실행할 수 있다.

C/C++ 개발 체인이 GCC를 기반으로 하므로, 오픈 소스 소프트웨어의 대다수는 리눅스에서 최소한의 수정 또는 전혀 수정 없이 컴파일 및 실행된다. 서드 파티 운영 체제도 니오스 II로 포팅되었다. 여기에는 마이크리움 MicroC/OS-II, eCos, 세거 마이크로컨트롤러 embOS, ChibiOS/RT, μCLinux 및 FreeRTOS가 포함된다.

GCC 15는 니오스 II의 단종으로 인해 니오스 II 프로세서 지원을 중단했다.

### 라이선싱
니오스 II는 자일링스 FPGA 제품군의 경쟁 소프트코어 CPU인 MicroBlaze와 비교할 수 있다. 마이크로블레이즈와 달리 니오스 II는 서드 파티 IP 제공업체인 시높시스 디자인웨어를 통해 표준 셀 응용 고정 집적 회로용으로 라이선스를 받을 수 있다. 디자인웨어 라이선스를 통해 설계자는 니오스 기반 설계를 FPGA 플랫폼에서 대량 생산 ASIC 장치로 포팅할 수 있다.

## 같이 보기
* LatticeMico8
* LatticeMico32
* MicroBlaze
* PicoBlaze
* Micon P200

## 각주

## 외부 링크
* 인텔의 니오스 II 사이트
* 니오스 II 임베디드 디자인 스위트 포럼
* 니오스 커뮤니티 위키
* RTEMS 실시간 운영 체제
* 코넬 ECE576 마이크로컨트롤러 과정 (니오스 II 사용)
* 니오스 II용 FreeRTOS 데모 문서
* UPB ECE31289 과정 (니오스 II 사용)

분류:소프트 마이크로프로세서