78K, RL78 하드웨어 곱셈 나눗셈 유닛을 사용하기
기술노트 44885
아키텍처:
78K, RL78
컴포넌트:
general
업데이트:
2021-06-04 오전 3:45
소개
일부 RL78 및 78K 마이크로컨트롤러에는 하드웨어 멀티플라이어/디바이더(multiplier/divider) 장치가 있습니다. 이 장치에 대한 런타임 지원을 포함하려면 다음과 같이 진행하십시오.
IAR Embedded Workbench for RL78 버전 2.10 (혹은 상위 버전)
IDE의, Project Options>General Options>Library Configuration 페이지에서 "Disable Hardware Multiplier/Divider Unit" 옵션을 체크 해제합니다. 현재 선택된 디바이스 RL78가 하드웨어 멀티플라이어/디바이더 장치가 없는 경우, 이 옵션은 사용할 수 없습니다.
커맨드 라인에서 프로젝트를 빌드하는 경우, src\hw_multiply_division_units 디렉터리에 있는 어셈블러 파일 hwmdu_LibReplacement.s를 포함시켜야 합니다.
IAR Embedded Workbench for 78K or RL78 버전1.40 (혹은 하위 버전)
IDE의 Project Options>General Options>Library Configuration 페이지에서 "Use Hardware Multiplier/Divider Unit" 옵션을 선택합니다. 현재 선택된 디바이스 RL78가 하드웨어 멀티플라이어/디바이더 장치가 없는 경우, 이 옵션은 사용할 수 없습니다.
커맨드 라인에서 프로젝트를 빌드하는 경우, src\<lib>\hw_multiply_division_units 디렉터리에 있는 어셈블러 파일 hwmdu_LibReplacement.snn 혹은 hwmuldiv_LibReplacement.snn를 포함시켜야 합니다.
일반
만약 어떤 종류의 하드웨어 멀티플라이어/디바이더 장치가 디바이스에 장착되어 있는지 잘 모를 경우, config\devices 디렉터리에 위치한 장치 파일(.menu)을 확인합니다. 이 XML 파일의 항목 <muldiv>에는 다음 값 중 하나가 포함됩니다:
mul+div+mac = Has a HW multiplier, divider and MAC unit
mul+div = Has a HW multiplier and divider
mul = Has a HW multiplier
none = No support
또한 이러한 루틴이 원래 원래 라이브러리 기능을 대체하려면 다음과 같은 링커 옵션을 사용해야 합니다:
RL78 예제 (버전 2.10 혹은 상위 버전):
--redirect ?I_MUL_L02=HWMUL_16_16_16
--redirect ?L_MUL_L03=HWMUL_32_32_32
--redirect ?UC_DIV_L01=HWDIV_8_8_8
--redirect ?UI_DIV_L02=HWDIV_16_16_16
--redirect ?UL_DIV_L03=HWDIV_32_32_32
--redirect ?UC_MOD_L01=HWMOD_8_8_8
--redirect ?UI_MOD_L02=HWMOD_16_16_16
--redirect ?UL_MOD_L03=HWMOD_32_32_32
--redirect ?SC_DIV_L01=HWSDIV_8_8_8
--redirect ?SI_DIV_L02=HWSDIV_16_16_16
--redirect ?SL_DIV_L03=HWSDIV_32_32_32
--redirect ?SC_MOD_L01=HWSMOD_8_8_8
--redirect ?SI_MOD_L02=HWSMOD_16_16_16
--redirect ?SL_MOD_L03=HWSMOD_32_32_32
RL78 예제 (버전 1.40 혹은 이전 버전):
-eHWDIV_8_8_8=?UC_DIV_L01
-eHWDIV_16_16_16=?UI_DIV_L02
-eHWDIV_32_32_32=?UL_DIV_L03
-eHWMUL_16_16_16=?I_MUL_L02
-eHWMUL_32_32_32=?L_MUL_L03
-eHWSDIV_8_8_8=?SC_DIV_L01
-eHWSDIV_16_16_16=?SI_DIV_L02
-eHWSDIV_32_32_32=?SL_DIV_L03
78K0R/K0/K0S 예제:
-eHWMUL_16_16_16=?I_MUL_L02
-eHWMUL_32_32_32=?L_MUL_L03
-eHWDIV_8_8_8=?UC_DIV_L01
-eHWDIV_16_16_16=?UI_DIV_L02
-eHWDIV_32_32_32=?UL_DIV_L03
-eHWSDIV_8_8_8=?SC_DIV_L01
-eHWSDIV_16_16_16=?SI_DIV_L02
-eHWSDIV_32_32_32=?SL_DIV_L03
참고사항
상기의 목록은 완벽하지 않습니다. 각 목록은 IAR Embedded Workbench 릴리즈의 다른 목록이 될 수 있습니다.
특정 어셈블러 루틴에 라이브러리 함수가 대체 되는지 hwmuldiv_LibReplacement.snn 혹은 hwmdu_LibReplacement.s 소스 파일에 기술되어 있습니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.