ZPU(마이크로프로세서)

ZPU (microprocessor)

ZPU는 노르웨이 회사인 Zylin AS가 현장 프로그래밍 가능한 게이트 어레이(FPGA)를 포함하는 전자 시스템에서 감독 코드를 실행하기 위해 고안한 마이크로프로세서 스택 머신이다.[1]

ZPU는 비교적 최근의 스택 머신으로서 경제적 틈새의 규모가 작으며, 사용자 및 구현의 수가 증가하고 있다.[2][3]그것은 매우 적은 양의 전자 로직을 요구하도록 설계되어 FPGA의 다른 목적에 더 많은 전자 로직을 사용할 수 있게 되었다.쉽게 사용할 수 있도록 GNU 컴파일러 컬렉션의 포트가 있다.이를 통해 컴파일러가 없는 CPU보다 적용이 훨씬 용이하다.작은 크기에 대한 교환으로 속도를 희생시키면서, 그것은 계산의 중간 결과를 레지스터가 아닌 푸시다운 스택에 보관한다.[1]

Zylin사는 2008년에 ZPU 오픈 소스를 만들었다.[1]

사용법

많은 전자 프로젝트에는 FPGA의 전자 로직이 포함된다.마이크로프로세서를 갖는 것 또한 낭비적이기 때문에 FPGA에서 전자 논리에 CPU를 추가하는 것이 일반적이다.CPU만이 자원을 적게 사용한다면 종종 더 작고 비용이 덜 드는 FPGA를 사용할 수 있다.이것은 ZPU가 다루기 위해 고안된 정확한 상황이다.

ZPU는 예를 들어 사용자 인터페이스와 같이 소프트웨어로 가장 잘 처리되는 시스템의 잡다한 작업을 처리하도록 설계되어 있다.ZPU는 매우 느리지만 크기가 작으면 FPGA에 필요한 고속 알고리즘을 배치할 수 있다.

또 다른 문제는 FPGA용 CPU 대부분이 특정 FPGA 제조사에서만 사용할 수 있는 폐쇄형 소스라는 점이다.때때로 프로젝트에는 보안 검사, 교육 용도 또는 기타 이유로 널리 배포될 수 있는 설계가 필요하다.이러한 독점적인 CPU의 라이센스는 이러한 사용을 막을 수 있다.ZPU는 오픈 소스로 제공된다.

일부 프로젝트에는 작아야 하는 코드가 필요하지만 본질적으로 더 큰 코드를 가진 CPU에서 실행된다.또는 GNU 컴파일러 컬렉션에 대한 코드, 컴파일러 및 디버깅 도구의 광범위한 선택으로 프로젝트가 유용할 수 있다.이 경우 대상 CPU에 대한 ZPU의 명령어 세트를 구현하기 위해 에뮬레이터를 작성할 수 있으며, ZPU의 컴파일러를 사용하여 코드를 만들 수 있다.결과 시스템은 느리지만, 많은 CPU보다 적은 메모리로 코드를 압축하고 프로젝트에서 다양한 컴파일러와 코드를 사용할 수 있다.[4]

설계 피쳐

ZPU는 전자 로직의 양을 최소화하도록 명시적으로 설계되었다.최소 명령 집합이 있지만 GNU 컴파일러 컬렉션용으로 인코딩할 수 있다.또한 FPGA에 있어야 하는 레지스터 수를 최소화하여 플립플롭의 수를 최소화한다.레지스터 대신 중간 결과는 스택의 메모리에 보관된다.[1]

작은 코드도 있어 메모리에 저장된다.스택 머신 지침은 레지스터 ID를 포함할 필요가 없으므로 ZPU의 코드는 다른 RISC CPU에 비해 작으며, ARM 홀딩스 썸2의 공간의 약 80%만 필요하다고 한다.[1]예를 들어, 서명된 즉시는 ZPU가 32비트 값을 최대 5바이트의 명령 공간에, 그리고 1개 정도의 작은 공간에 저장할 수 있도록 돕는다.대부분의 RISC CPU는 최소 8바이트가 필요하다.

마지막으로, 지침의 약 2/3는 다른 1/3 "필수" 지침을 사용하여 구현된 펌웨어에 의해 에뮬레이션될 수 있다.결과는 매우 느리지만, 그 결과 CPU는 446개의 룩업-테이블(FPGA 복잡성의 척도, 대략 1700개의 전자 로직 게이트와 동일)을 필요로 할 수 있다.

ZPU에는 위치 0에서 시작하는 32바이트의 코드 공간으로 구성된 재설정 벡터가 있다.또한 단일 에지 민감 인터럽트를 가지고 있으며, 벡터는 주소 32에서 시작하는 32바이트의 코드 공간으로 구성된다.벡터 2에서 63까지는 각각 32바이트의 공간이 있지만 33에서 63까지의 지시사항을 에뮬레이트하는 코드에 예약되어 있다.

기본 ZPU에는 32비트 데이터 경로가 있다.ZPU에는 16비트 폭의 데이터 경로가 있는 변종도 있어 논리를 더욱 절약할 수 있다.

도구 및 리소스

ZPU에는 GNU 컴파일러 컬렉션의 잘 검증된 포트가 있다.[1]매니아와 펌웨어 엔지니어들은 ECOS,[1] FreeRTOS[5], μClinux를 포트화했다.[6]적어도 한 그룹의 마니아들은 아두이노의 대중적인 개발 환경을 모방하여 ZPU에 적응시켰다.[7]

현재 ZPU 코어의 여러 모델이 있다.원래의 자이린 코어 외에 ZPUino 코어,[7] ZPUFlex 코어도 있다.[1][8]Zylin 코어는 최소 FPGA 발자국을 위해 설계되었으며 16비트 버전을 포함한다.ZPUino는 속도에 대한 실질적인 개선을 가지고 있고, 에뮬레이트된 지시사항을 하드웨어로 대체할 수 있으며, 시스템 온 칩 프레임워크에 내장되어 있다.ZPUFlex는 외부 메모리 블록을 사용하도록 설계되었으며 에뮬레이트된 지침을 하드웨어로 대체할 수 있다.

학술 프로젝트에는 전력 효율 연구와 개선,[9] 신뢰성 연구 등이 포함된다.[10]

속도를 향상시키기 위해 대부분의 구현자는 에뮬레이트된 지침을 구현하고 스택 캐시를 추가했다.[7][8][9]이 외에도, 한 구현자는 2-스택 아키텍처가 파이프라이닝을 허용하지만(즉, 클럭 사이클당 하나의 명령으로 속도를 향상시키는 것) 컴파일러 변경이 필요할 수도 있다고 말했다.[9]

한 구현자는 스택 캐시와 자동화된 클록 게이트 삽입으로 전력 사용량을 46%까지 줄였다.[9]그 후 전력 사용량은 ARM v2a 아키텍처를 구현하는 소규모 오픈 소스 앰버 코어(Amber core)와 대략 동등했다.

ZPU의 결함을 가장 잘 견딜 수 있는 부분은 주소 버스, 스택 포인터 및 프로그램 카운터다.[10]

명령 집합

「TOS」는 「탑 오브 스택」의 약칭이며, 「NOS」는 「넥스트 오브 스택」의 약칭이다.

필수 ZPU 명령 집합
이름 이진수 설명
중단점 00000000 CPU를 중지하거나 디버거로 이동하십시오.
IM_x 1xxxxxxxxx 서명된 7비트를 TOS에 즉시 푸시 또는 추가하십시오.
STORESP_x 010xxxxxxx TOS를 팝업하여 위에서 오프셋된 스택에 저장하십시오.
LOADSP_x 011xxxxxxx 스택에서 인덱싱된 값에서 가져와 TOS에 푸시하십시오.
에뮬레이트_x 001xxxxxx 벡터 x에서 코드로 명령을 에뮬레이트하십시오.
ADDSP_x 0001xxxxx 스택에서 인덱싱된 값에서 가져와 TOS에 값을 추가하십시오.
POPC 00000100 TOS에서 주소를 입력하고 PC에 저장하십시오.
로드 00001000 주소를 입력하고 로드된 메모리 값을 TOS로 푸시하십시오.
스토어 00001100 TOS가 가리키는 메모리에 NOS를 저장한다.둘 다 튀기다.
푸시스프 00000010 현재 SP를 TOS에 밀어 넣으십시오.
POPSP 00001101 TOS를 팝업하여 SP에 저장하십시오.
추가 00000101 TOS 및 NOS의 정수 추가.
AND 00000110 TOS와 NOS의 Bitwise AND.
OR 00000111 TOS와 NOS의 비트 OR.
NOT 00001001 TOS의 비트는 그렇지 않다.
플립 00001010 TOS의 비트 순서를 거꾸로 하십시오.
NOP 00001011 작동 안 함.(일반적으로 지연 루프 또는 코드 테이블에 사용됨)

33에서 63까지의 코드 포인트는 벡터 2에서 32까지의 코드: LOADH 및 STOREH(16비트 메모리 액세스), LESSTHAN(true의 경우 1로 설정된 비교, false의 경우 0), LESSTHANOREQ에서 에뮬레이션할 수 있다.UAL, ULESSTHAN, ULESSTHANEQUAL, SWAP (TOS with NOS), MULT, LSHIFTRIGHT, ASHIFTLEFT, ASHIFTRIGHT, CALL, EQ, NEQ, NEG, SUB, XOR, LOADB and STOREB (8-bit memory access), DIV, MOD, EQBRANCH, NEQBRANCH, POPPCREL, CONFIG, PUSHPC, SYSCALL, PUSHSPADD, HALFMULT, CALLPCREL

참조

  1. ^ a b c d e f g h "ZPU - the worlds [sic] smallest 32-bit CPU with GCC toolchain : Overview". opencores.org, Zylin Corp. Retrieved 7 February 2015.
  2. ^ Hennesy, John L.; Patterson, David A. (2012). Computer Architecture, A Quantitative Approach (5th ed.). Waltham, MA: Elsevier. ISBN 978-0-12-383872-8.
  3. ^ Asanovic, Krste. "RISC-V: An Open Standard for SoCs". EE Times. Universal Business Media. Retrieved 7 February 2015.
  4. ^ "ZOG - A ZPU processor core for Propeller with GNU C + Fortran". Parallax Forum. Parallax. Retrieved 6 September 2019.
  5. ^ Antonio, Anton. "ZPUino-HDL/zpu/sw/freertos/". GitHub. Antonio Anton. Retrieved 7 February 2015.
  6. ^ Lopes, Alvaro. "alvieboy/Linux". GitHub. Alvaro Lopes. Retrieved 7 February 2015.
  7. ^ a b c Lopes, Alvaro. "ZPUino". www.alvie.com. Retrieved 7 February 2015.
  8. ^ a b AMR. "ZPU Flex". Retro Ramblings. Retrieved 9 February 2015.
  9. ^ a b c d Eriksen, Stein Ove. "Low Power microcontroller core". NTNU Open. Norges teknisk-naturvitenskapelige universitet. Retrieved 9 February 2015.
  10. ^ a b Zandrahimi, M. (2010). "An analysis of fault effects and propagations in ZPU: The world's smallest 32 bit CPU". 2nd Asia Symposium on Quality Electronic Design (ASQED). IEEE. pp. 308–313. doi:10.1109/ASQED.2010.5548320. ISBN 978-1-4244-7809-5. S2CID 20045721.