본문 바로가기

WCH/CH32V20x

CH32V208 SSM - Arduino 만들기 (Dhrystone, Whetstone, IIR Benchmark 테스트시 문제점 발견)

CH32V208은 RISC-V4C 코어로 저렴한 가격에 메모리도 풍부(128KB)하고 다양한 기능이 있어 Arduino를 이용해 다양한 라이브러리를 사용하여 테스트 가능하다.

메인 클럭이 144Mhz로 예전에 테스트 했던 CH32V307(RISC-V4F) 코어와 속도는 비슷한데 FPU가 포함되어 있지 않다.  CH32V307 과 비교해서 성능차이를 비교해 보면 좋을것 같다.

 

구분  CH32V208 CH32V307
코어 QingKe V4C (No FPU) QingKe V4F (FPU 포함)
최대 클럭 144MHz 144MHz
Flash / SRAM 128KB / 64KB 256KB / 64KB
무선 (BLE) BLE 5.3 지원 지원 안 함
이더넷 10M MAC+PHY GbE MAC (+ 10M PHY)
USB Full-Speed (12Mbps) High-Speed (480Mbps)
인터페이스 USART 4개, CAN 1개 UART 8개, CAN 2개, SDIO, DVP



Arduino Preferences 에서 json 파일을 등록하고

https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json

 



Board Manager에서 CH32를 검색해서 설치 할수 있다.



Board 명을 CH32V20x 로 설정한 후

Board Select 에서 CH32V208을 찾아보면 CH32V203 시리즈만 있다. 우선 CH32V203으로 테스트 해 보자



그런데...

같은 RISCV코어의 CH32V307 벤치마크 테스트 결과 407DMIPS와 비교해 보면 143DMIPS 로 상당히 많은 차이를 보인다.

Dhrystone Benchmark, Version 2.1 (Language: C)
---------------------------------------------------


Execution starts, 300000 runs through Dhrystone

Execution ends : 1.194 Seconds
Measured time too small to obtain meaningful results
Please increase number of runs

Microseconds for one run through Dhrystone: 3.98
Dhrystones per Second: 251253.76
VAX MIPS rating = 143.00 DMIPS
Whetstone Benchmark, Version 1.2 (Language: C)
---------------------------------------------------

Loops: 1000, Iterations: 1, Duration: 8835 ms.
C Converted Single Precision Whetstones: 11.32 MIPS

4th order float IIR speed benchmark
---------------------------------------------------
total number of samples: 15000  duration [us]: 184  ==> speed [kiloSamples/second] : 81.52

 

 


Arduino로 간단히 테스트 해 보려고 했는데...

또 문제가 발생하는구나...

그냥 넘어가기도 그렇고 좀더 들여다 보자

 

CH32 RISC-V 시리즈 비교표를 보면 V3xx는 RISC-V4F, CH32V203 은 V4B, CH32V208은 V4C코어로 구성되어 있다.

 

 

CH32V203(V4B)와 CH32V208(V4C)를 비교 해보면 하드웨어 나눗셈 가속기가 있다고 되어 있다. 이것 때문인가?

항목  QingKe V4B QingKe V4C
적용 모델 CH32V203 등 CH32V208, CH32L103, CH59x 등
메모리 보호 (PMP/MPU) 미지원 (일반적으로 지원 안 함) 지원 (MPU/PMP 추가)
하드웨어 나눗셈 표준 속도 주기(Cycle) 단축 및 가속
명령어 세트 확장 RV32IMAC RV32IMAC + XW(사용자 정의 압축 명령어)
주요 목표 저전력 범용 MCU 성능 무선(BLE) 및 보안/안정성 강화


간단하게 CH32V307과 속도 비교만 해 보려고 했는데… CH32V208용 Arduino Board 파일을 만들어야 할것 같다.

일단 보드파일 추가 해서 테스트 해보자

 

#CH32V208G8 SSM Board
CH32V20x_EVT.menu.pnum.CH32V208G8=CH32V208_SSM
CH32V20x_EVT.menu.pnum.CH32V208G8.node=NODE_V208G8
CH32V20x_EVT.menu.pnum.CH32V208G8.upload.maximum_size=131072
CH32V20x_EVT.menu.pnum.CH32V208G8.upload.maximum_data_size=65536
CH32V20x_EVT.menu.pnum.CH32V208G8.build.mcu=QingKe-V4C
CH32V20x_EVT.menu.pnum.CH32V208G8.build.board=CH32V208G8
CH32V20x_EVT.menu.pnum.CH32V208G8.build.series=CH32V20x
CH32V20x_EVT.menu.pnum.CH32V208G8.build.variant=CH32V20x/CH32V208G8
CH32V20x_EVT.menu.pnum.CH32V208G8.build.chip=CH32V208
CH32V20x_EVT.menu.pnum.CH32V208G8.build.march=rv32imacxw
CH32V20x_EVT.menu.pnum.CH32V208G8.build.mabi=ilp32
CH32V20x_EVT.menu.pnum.CH32V208G8.build.math_lib_gcc=-lm 
CH32V20x_EVT.menu.pnum.CH32V208G8.build.IQ_math_RV32=
CH32V20x_EVT.menu.pnum.CH32V208G8.build.ch_extra_lib=-lprintf

 

 

variant_CH32V208G8.h 파일에 UART 핀맵도 설정해 주고

#ifndef PIN_SERIAL_RX
	#define PIN_SERIAL_RX         PA3
#endif
#ifndef PIN_SERIAL_TX
	#define PIN_SERIAL_TX         PA2
#endif

 

 

이렇게 보드파일을 추가 하면 CH32V208 SSM 보드에 맞는 Arduino 보드 파일이 추가 되는것을 확인 할 수 있다.

 

 

이렇게 해서 구동하면 CH32V208의 Arduino 코드는 잘 동작한다.

 

이제 다시 벤치마크 테스트를 진행해 보자.

테스트 코드는   STM32H MCU Dhrystone, Whetstone, IIR Benchmark 성능 테스트 를 이용하였다.

 

테스트 결과 CH32V203(QingKe-V4B)로 설정했을때 144MIPS 보다 CH32V208(QingKe-V4C) 로 설정했을때 391 DMIPS로 두배 이상의 성능이 향상되는 것을 확인 할 수 있다. 물론 V4F와 비교해서 Whetstones 성능은 많이 떨어지는것 같다.

Dhrystone Benchmark, Version 2.1 (Language: C)
---------------------------------------------------


Execution starts, 300000 runs through Dhrystone

Execution ends : 0.436 Seconds
Measured time too small to obtain meaningful results
Please increase number of runs

Microseconds for one run through Dhrystone: 1.45
Dhrystones per Second: 687419.09
VAX MIPS rating = 391.25 DMIPS
Whetstone Benchmark, Version 1.2 (Language: C)
---------------------------------------------------



Loops: 1000, Iterations: 1, Duration: 4493 ms.
C Converted Single Precision Whetstones: 22.26 MIPS

4th order float IIR speed benchmark
---------------------------------------------------
total number of samples: 15000  duration [us]: 182  ==> speed [kiloSamples/second] : 82.42

 

 

결론

저렴하고 작은 페키지에 USB, Ethernet, BLE 까지 내장한 CH32V208은 상당히 매력적이다. 하지만 아직은 좀더 다양한 지원이 이루어 지지는 않는것 같다. 하나씩 테스트 하면서 해결해야 하나...

프로젝트에 바로 투입하기보다 좀더 다양한 테스트를 해 볼 필요가 있을것 같다.

반응형