KR20030071401A - 이티에스아이 인트린식 명령 변환 장치 및 그 방법 - Google Patents

이티에스아이 인트린식 명령 변환 장치 및 그 방법 Download PDF

Info

Publication number
KR20030071401A
KR20030071401A KR1020020011086A KR20020011086A KR20030071401A KR 20030071401 A KR20030071401 A KR 20030071401A KR 1020020011086 A KR1020020011086 A KR 1020020011086A KR 20020011086 A KR20020011086 A KR 20020011086A KR 20030071401 A KR20030071401 A KR 20030071401A
Authority
KR
South Korea
Prior art keywords
intrinsic
etsi
dsp
code
var2
Prior art date
Application number
KR1020020011086A
Other languages
English (en)
Inventor
김원철
Original Assignee
주식회사 현대시스콤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 현대시스콤 filed Critical 주식회사 현대시스콤
Priority to KR1020020011086A priority Critical patent/KR20030071401A/ko
Publication of KR20030071401A publication Critical patent/KR20030071401A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

본 발명은 ETSI에서 제공하고 있는 인트린식 명령을 TI 62xx 디지털 신호 처리기(DSP)에서 사용하기에 적합하도록 변환하는 ETSI 인트린식 명령 변환 장치 및 그 방법에 관한 것으로서, 이러한 본 발명은, TI 62xx DSP의 경우 DSP 구조가 C언어와 유사하기 때문에 C언어 상에서 개발할 수 있는 장점을 최대한 고려하여 C언어의 define 명령과 inline 명령을 이용하여 인트린식 명령 변환 테이블을 작성한다. 그런 후 데이터가 입력되면 EVRC 코드내에 ETSI 인트린식 라이브러리의 존재를 분석하고, 상기 분석 결과 ETSI 인트린식 라이브러리를 사용한 코드일 경우 미리 설정된 명령 변환 테이블을 이용하여 상기 ETSI 인트린식 라이브러리를 DSP 인트린식 명령어로 변환한 후 DSP 실행코드를 생성하여 출력함으로써, ETSI에서 제공하고 있는 인트린식 명령 라이브러리 대신에 변환 코드를 사용함으로써, ETSI 인트린식을 사용하는 코드의 명령 수행속도를 최적화할 수 있다.

Description

이티에스아이 인트린식 명령 변환 장치 및 그 방법{Apparatus and Method for changing ETSI Intrinsic order}
본 발명은 유럽 전기통신 표준 협회(ETSI : European Telecommunications Standards Institute) 인트린식(Intrinsic) 명령 변환에 관한 것으로서, 특히 ETSI에서 제공하고 있는 인트린식 명령을 TI 62xx 디지털 신호 처리기(DSP)에서 사용하기에 적합하도록 변환하는 ETSI 인트린식 명령 변환 장치 및 그 방법에 관한 것이다.
통상, 코덱(CODEC)의 실시간 동작을 위한 코드를 작성하는 데 있어서 동작 수행 속도에 가장 영향을 많이 미치는 것이 인트린식 명령들이며, 최적의 인트린식 명령 테이블을 구현함으로써 보다 빠르게 동작하는 코드를 작성할 수 있다.
ETSI에서 제공하고 있는 인트린식 명령은 고정 소수점 연산을 하는 프로그램을 위한 기본적인 사칙연산 이외에도 코덱을 구현하는 데 필요한 기초적인 연산을 정의한 것이다.
마찬가지로 TI 62xx DSP에서도 고정 소수점 연산을 위하여 기초적인 연산을 정의하였다.
아래의 [표1]은 ETSI 인트린식 명령과 TI 62xx용 인트린식 명령을 비교한 것이다.
ETSI Intrinsic 명령 TI 62xx DSP용 Intrinsic 명령
abs_s _abs
L_abs _labs
L_add _add2
add _clr
msu_r _clrr
mac_r _mpy
mult_r _ext
mult _extr
L_sub _extu
round _extur
negate _mpyus
L_negate _mpysu
L_deposit_l _mpyu
L_deposit_h _mpyh
sub _lmbd
extract_l _mpyhus
extract_h _mpyhsu
norm_s _mpyhu
norm_l _mpyhl
L_msu _mpyhuls
L_mac _mpyhslu
L_mult _mpyhlu
norm_ll _mpylh
L_shlp _mpyluhs
SL_add _mpylshu
L_multhl _mpylhu
saturate _norm
divide_s _lnorm
L_shl _sadd
L_shr _lsadd
shr _sat
L_shift_r _set
shift_r _setr
L_mpy_ll _smpy
L_mpy_ls _smpyh
L_divide _smpyhl
ETSI Intrinsic 명령 TI 62xx DSP용 Intrinsic 명령
_smpyhl
_sshl
_ssub
_lssub
_subc
_sub2
주지한 바와 같이 ETSI에서 제공하고 있는 인트린식 명령과 TI 62xx DSP용 인트린식 명령이 일치하지 않기 때문에, 전자를 후자와 연결할 수 있는 변환테이블이 필요하다.
종래 C언어로 구현된 고정 소수점 코드를 실시간 동작을 위해 DSP에 적절한 코드로 변형하는 경우, DSP구조에 적합한 언어를 사용하여 전체 코드를 다시 작성하였다.
그러나 이 경우 개발 시간이 많이 걸리고, DSP에 맞는 언어를 선택하기 때문에 작성되어진 코드에 대한 유지 보수와 재사용성에 어려움이 따르는 문제점을 발생하였다.
이에 본 발명은 상기와 같은 종래 ETSI 인트린식 명령을 TI 62xx DSP에 맞게 변환할 경우 발생하는 제반 문제점을 해결하기 위해서 제안된 것으로서,
본 발명의 목적은, ETSI에서 제공하고 있는 인트린식 명령을 TI 62xx 디지털 신호 처리기(DSP)에서 사용하기에 적합하도록 변환하는 ETSI 인트린식 명령 변환 장치 및 그 방법을 제공하는 데 있다.
상기와 같은 목적을 달성하기 위한 본 발명은,
TI 62xx DSP의 경우 DSP 구조가 C언어와 유사하기 때문에 C언어 상에서 개발할 수 있는 장점을 최대한 고려하여 C언어의 define 명령과 inline 명령을 이용하여 인트린식 명령 변환 테이블을 작성한다. 이렇게 함으로써 ETSI에서 제공하고 있는 인트린식 명령 라이브러리 대신에 변환 코드를 사용함으로써, ETSI 인트린식을 사용하는 코드의 명령 수행속도를 최적화할 수 있다.
도 1은 본 발명에 의한 ETSI 인트린식 명령 변환장치의 구성을 보인 블록도이고,
도 2는 본 발명에 의한 ETSI 인트린식 명령 변환방법을 보인 흐름도이다.
<도면의 주요 부분에 대한 부호의 설명>
10 ..... 데이터 입력부
20 ..... 코드 판별부
30 ..... 명령 변환부
40 ..... DSP 컴파일러
이하 상기와 같은 기술적 사상에 따른 본 발명의 바람직한 실시예를 첨부한 도면에 의거 상세히 설명한다.
도 1은 본 발명에 의한 ETSI 인트린식 명령 변환장치의 구성을 보인 블록도이다.
여기서 참조부호 10은 데이터 입력부를 나타내고, 참조부호 20은 입력된 코드가 EVRC(Enhanced Variable Rate speech Codec) 코드내에 ETSI 인트린식 라이브러리 존재 유무를 판별하는 코드 판별부를 나타내고, 참조부호 30은 ETSI 인트린식 명령을 DSP 인트린식 명령으로 변환하는 명령 변환부를 나타내고, 참조부호 40은 상기 코드 판별부(20)에서 출력되는 EVRC 코드 또는 상기 명령 변환부(30)에서 출력되는 DSP 인트린식 명령으로 DSP 동작을 위한 실행 코드를 생성하는 DSP 컴파일러를 나타낸다.
이와 같이 구성되는 본 발명에 의한 명령 변환장치는, 먼저 데이터 입력부(10)를 통해 데이터를 입력받는다.
그리고 데이터 입력이 이루어지면 코드 판별부(20)에서 EVRC 코드내에 ETSI 인트린식 라이브러리가 존재하는지를 판별한다. 상기 판별 결과 입력된 데이터내에 ETSI 인트린식 라이브러리 코드가 없으면 바로 DSP 컴파일러(40)에 입력된 데이터(EVRC 코드)를 전달한다.
그러나 입력된 데이터가 ETSI 인트린식 라이브러리를 사용하고 있으면, 입력된 데이터를 명령 변환부(30)에 전달한다.
그러면 명령 변환부(30)는 아래에 기재한 [표2]와 같은 명령 변환 테이블을 이용하여 입력되는 ETSI 인트린식 라이브러리를 DSP 인트린식 명령으로 변환하고, 이를 DSP 컴파일러(40)에 전달한다.
즉, ETSI에서 제공하고 있는 인트린식 명령과 DSP 인트린식 명령들은 거의 비슷한 명령을 나타내지만, TI 62xx DSP용 인트린식 명령의 경우 DSP 구조에 맞게 최적화 되어져 있기 때문에, ETSI 인트린식 명령과 일대 일로 대응되지 않는다.
따라서 아래에 기재한 [표2]와 같은 변환 테이블을 이용하여 명령을 변환하게 된다. 이 변환 테이블은 C언어를 기반으로 한다. 간단히 대응되는 명령에 대해서는 define 명령을 사용하여 인트린식 명령이 일대일 치환되게 하며, 복잡하게 대응되는 명령에 대해서는 함수로 만들어 Inline 명령을 사용하여 함수가 치환되게 하였다.
여기서 함수로 치환되는 명령에는 [표2]의 saturate, divide_s, L_shl, L_shr, shl, shr, L_shift_r, shift_r, L_mpy_ll, L_mpy_ls, L_divide 등이 있다. 나머지 명령들은 모두 명령단위로 치환된다.
ETSI 인트린식 명령을 DSP 인트린식 명령으로 변환하기 위한 테이블
ETSI Intrinsic 명령 TI 62xx DSP 대응 명령
abs_s(var) _abs((Longword)var)
L_abs _abs
L_add _sadd
add(var1, var2) (Shortword)(_sadd(_sshl(var1, 16), _sshl(var2, 16))>>16)
L_sub _ssub
sub(var1, var2) (Shortword)(_sshl(var1,16),_sshl(var2,16))>>16)
L_mult _smpy
L_mac(var3, var1, var2) _sadd(var3,_smpy(var1,var2)
L_msu(var3, var1, var2) _ssub(var3,_smpy(var1,var2))
norm_1 _norm
norm_s(var) _norm(var<<16)
extract_h(var) (Shortword)(_extu(var,0,16))
extract_l(var) (Shortword)var
L_deposit_h(var) var<<16
L_deposit_l(var) (Longword)var
L_negate(var) _var
negate(var) _var
round(var) extract_h(_sadd(var,0x8000))
mult(var1, var2) extract_h(_smpy(var1,var2))
mult_r(var1, var2) round(_smpy(var1,var2))
mac_r(var3, var1, var2) round(L_mac(var3,var1,var2)
msu_r(var3, var1, var2) round(L_msu(var3,var1,var2))
norm_ll _lnorm
L_shlp _sshl
SL_add _lsadd
L_multhl _smpyhl
saturate(Longword L_var1) saturate(Longword L_var1) {if(L_var1>SW_MAX)return SW_MAX;else if (L_var1 < SW_MIN)return SW_MIN;elsereturn(Shortword) L_var1; }
divide_s(Shortword var1, Shortword var2) divide_s(Shortword var1, Shortword var2) {Longword div_L_num, div_L_denom;Longword j;div_L_num = _sshl(var1, 16);div_L_denom = _sshl(var2, 16);for (j=0; j<16; j++)div_L_num = _subc(div_L_num, div_L_denom);return(short)div_L_num; }
L_shl(Longword L_var1, Shortword var2) L_shl(Longword L_var1, Shortword var2){if(var2<0)return L_var1>>(-var2);elsereturn_sshl(L_var1, var2); }
L_shr(Longword L_var1, Shortword var2) L_shr(Longword L_var1, Shortword var2){if(var2<0)return L_shl(L_var1, -var2);elsereturn L_var1>>var2 }
shl(Shortword var1, Shortword var2) shl(Shortword var1, Shortword var2) {if(var2<0)return shr(var1, -var2);elsereturn (_sshl(var1<<16, var2))>>16; }
shr(Shortword var1, Shortword var2) shr(Shortword var1, Shortword var2) {return(var1>>var2); }
L_shift_r(Longword L_var1, Shortword var2) L_shift_r(Longword L_var1, Shortword var2) {if(var2<-31)return 0;else if (var2 <0)return L_add(L_shl(L_var1,var2),L_shl(L_var1,var2+1)&0x1);elsereturn L_shl(L_var1, var2);}
shift_r(Shortword var1, Shortword var2) shift_r(Shortword var1, Shortword var2){if(var2>=0)return(_sshl(var!<<16,var2))>>16;elsereturn round((var1<<16)>>(-var2));}
L_mpy_ll(Longword L_var1, Longword L_var2) L_mpy_ll(Longword L_var1, Longword L_var2){Shortword swLow1, swLow2;Longword L_varOut, L_low, L_mid1,L_mid2, L_mid;swLow1=_extu(L_var1,16,17);swLow2=_extu(L_var2,16,17);L_low=L_shr9_smpy(swLow1,swLow2),16);L_mid1=L_shr(_smpyhl(L_var1,swLow2),1);L_mid=L_add(L_mid1, L_low);L_mid2=L_shr(_smpylh(swLow1,L_var2),1);L_mid=L_add(L_mid, L_mid2);L_mid=L_shr(L_mid,14);L_varOut=_sadd(L_mid,_smpyh(L_var1,L_var2));return(L_varOut);}
L_mpy_ls(Longword L_var2, Shortword var1) L_mpy_ls(Longword L_var2, Shortword var1){LongwordL_varOut;Shortword swtemp;swtemp=_extu(L_var2,16,17);L_varOut=_smpy(var1,swtemp)>>15;L_varOut=_sadd(L_varOut,_smpyhl(L_var2,var1));return(L_varOut);}
L_divide(Longword L_num, Longword L_denom) L_divide(Longword L_num, Longword L_denom){Shortword approx;Longword L_div;if (L_num < 0L_denom < 0L_num > L_denom){return(0);}approx = divide_s((Shortword) 0 x 3fff,extract_h(L_denom));L_div=L_mpy_ls(L_denom, approx);L_div=L_sub((Longword)0x7fffffffL,L_div);L_div = L_mpy_ls(L_div, approx);L_div=L_mpy_ll(L_num,L_div);L_div=L_shl(L_div, 2);return(L_div);}
다음으로 DSP 컴파일러(40)에서는 상기 코드 판별부(20)에서 출력되는 EVRC 코드 또는 명령 변환부(30)에서 전송된 변환 코드로 DSP 실행을 위한 코드를 생성하여 DSP에 전달하게 된다.
도 2는 본 발명에 의한 ETSI 인트린식 명령 변환방법을 보인 흐름도이다.
이에 도시된 바와 같이, 데이터가 입력되면 EVRC 코드내에 ETSI 인트린식 라이브러리가 사용 유무를 분석하는 단계(S101 ~ S102)와, 상기 분석 결과 ETSI 인트린식 라이브러리를 사용하지 않았을 경우 바로 DSP 실행코드를 생성하여 출력하는 단계(S103, S106 ~ S107)와, 상기 분석 결과 ETSI 인트린식 라이브러리를 사용하였을 경우 명령 변환 테이블을 이용하여 상기 ETSI 인트린식 라이브러리를 DSP 인트린식 명령어로 변환한 후 DSP 실행코드를 생성하여 출력하는 단계(S104 ~ S105, S106 ~ S107)로 이루어진다.
이와 같이 이루어지는 본 발명에 의한ETSI 인트린식 명령 변환방법은, 먼저 단계 S101에서 데이터 입력부(10)를 통해 데이터를 입력받는다.
그리고 단계 S102에서 코드 판별부(20)는 EVRC 코드내에 ETSI 인트린식 라이브러리가 사용되었는지를 판별한다.
상기 판별 결과 입력된 데이터가 EVRC 코드이면 단계 S106으로 이동하여 입력된 EVRC 코드를 이용하여 DSP 실행코드를 생성하고, 단계 S107로 이동하여 그 생성한 실행코드를 DSP측으로 출력하게 된다.
다음으로 단계 S104에서 검색한 결과 입력된 데이터에 ETSI 인트린식 라이브러리가 사용되었을 경우에는, 단계 S105로 이동하여 주지한 [표2]와 같은 명령 변환 테이블을 이용하여 입력되는 ETSI 인트린식 라이브러리를 DSP 인트린식 명령으로 변환하고, 이를 DSP 컴파일러(40)에 전달한다.
즉, ETSI에서 제공하고 있는 인트린식 명령과 DSP 인트린식 명령들은 거의 비슷한 명령을 나타내지만, TI 62xx DSP용 인트린식 명령의 경우 DSP 구조에 맞게 최적화 되어져 있기 때문에, ETSI 인트린식 명령과 일대 일로 대응되지 않는다.
따라서 [표2]와 같은 변환 테이블을 이용하여 명령을 변환하게 된다. 이 변환 테이블은 C언어를 기반으로 한다. 간단히 대응되는 명령에 대해서는 define 명령을 사용하여 인트린식 명령이 일대일 치환되게 하며, 복잡하게 대응되는 명령에 대해서는 함수로 만들어 Inline 명령을 사용하여 함수가 치환되게 하였다.
여기서 함수로 치환되는 명령에는 [표2]의 saturate, divide_s, L_shl, L_shr, shl, shr, L_shift_r, shift_r, L_mpy_ll, L_mpy_ls, L_divide 등이 있다. 나머지 명령들은 모두 명령단위로 치환된다.
다음으로 단계 S106 및 S107에서는 전송된 변환 코드로 DSP 실행을 위한 코드를 생성하여 DSP에 전달하게 된다.
이상에서 상술한 본 발명에 따르면, 명령 변환 테이블을 이용하여 ETSI에서 제공하고 있는 인트린식 명령 라이브러리를 TI 62xx DSP에서 실시간 적으로 사용할 수 있는 실행코드를 생성할 수 있는 효과가 있다.
또한, 상기와 같은 실행코드의 생성으로 ETSI에서 제공하는 인트린식 명령라이브러리가 입력된 경우에는 EVRC 코덱을 실시간으로 동작시킬 수 있는 이점이 있다.

Claims (2)

  1. EVRC 코덱 제어장치에 있어서,
    데이터 입력부를 통해 입력된 EVRC 코드내에 ETSI 인트린식 라이브러리가 존재하는지를 판별하는 코드 판별부와;
    상기 코드 판별부에서 판별한 결과 입력 데이터에 ETSI 인트린식 명령이 사용된 경우 그 ETSI 인트린식 명령을 미리 설정된 명령 변환 테이블을 이용하여 DSP 인트린식 명령으로 변환하는 명령 변환부와;
    상기 코드 판별부에서 출력되는 EVRC 코드 또는 상기 명령 변환부에서 출력되는 DSP 인트린식 명령으로 DSP 동작을 위한 실행 코드를 생성하는 DSP 컴파일러를 포함하여 구성된 것을 특징으로 하는 이티에스아이 인트린식 명령 변환 장치.
  2. EVRC 코덱 제어방법에 있어서,
    데이터가 입력되면 EVRC 코드내에 ETSI 인트린식 라이브러리의 사용 유무를 분석하는 단계와;
    상기 분석 결과 ETSI 인트린식 라이브러리가 사용된 경우 미리 설정된 명령 변환 테이블을 이용하여 상기 ETSI 인트린식 라이브러리를 DSP 인트린식 명령어로 변환한 후 DSP 실행코드를 생성하여 출력하는 단계를 포함하여 이루어짐을 특징으로 하는 이티에스아이 인트린식 명령 변환 방법.
KR1020020011086A 2002-02-28 2002-02-28 이티에스아이 인트린식 명령 변환 장치 및 그 방법 KR20030071401A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020020011086A KR20030071401A (ko) 2002-02-28 2002-02-28 이티에스아이 인트린식 명령 변환 장치 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020020011086A KR20030071401A (ko) 2002-02-28 2002-02-28 이티에스아이 인트린식 명령 변환 장치 및 그 방법

Publications (1)

Publication Number Publication Date
KR20030071401A true KR20030071401A (ko) 2003-09-03

Family

ID=32223154

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020020011086A KR20030071401A (ko) 2002-02-28 2002-02-28 이티에스아이 인트린식 명령 변환 장치 및 그 방법

Country Status (1)

Country Link
KR (1) KR20030071401A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100703743B1 (ko) * 2005-02-18 2007-04-05 삼성전자주식회사 문자 코드 변환 장치 및 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100703743B1 (ko) * 2005-02-18 2007-04-05 삼성전자주식회사 문자 코드 변환 장치 및 방법

Similar Documents

Publication Publication Date Title
JP4786268B2 (ja) コンパイル装置
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
JPH10240543A (ja) オブジェクト・コード最適化装置
CN110196720A (zh) 一种Simulink生成动态链接库的优化方法
KR20030071401A (ko) 이티에스아이 인트린식 명령 변환 장치 및 그 방법
US6256776B1 (en) Digital signal processing code development with fixed point and floating point libraries
JP2636665B2 (ja) 実行情報採取装置
CN113626035A (zh) 基于tvm面向risc-v设备的神经网络编译方法
JP3327674B2 (ja) プログラム翻訳装置及び方法
JPH0721032A (ja) プログラム最適化処理方式
JP3337763B2 (ja) 図面説明文生成装置
JPH04229324A (ja) 誤差評価プログラム生成実行方式
JP3328056B2 (ja) 構文解析木からの情報抽出装置
CN111026719B (zh) 数据处理装置及其控制方法
JP3295853B2 (ja) コンパイル処理装置
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
CN118092936A (zh) 一种生成可视化数据流的方法及系统
JP3658771B2 (ja) コンパイラ装置
JP3370243B2 (ja) コンパイル方法及び装置
JPH10116197A (ja) プログラム解析方法
Mulder The computer architect's workbench
JPH08221276A (ja) コンパイラ
JPH03144829A (ja) 可変ターゲットコンパイラ方式
JPH02247734A (ja) 入出力手続き呼び出しの最適化方式
JPH0795275B2 (ja) コンパイル処理装置

Legal Events

Date Code Title Description
N231 Notification of change of applicant
WITN Withdrawal due to no request for examination