본 발명의 실시예에서 보이는 곱셈장치의 논리연산체계는 공개키 방식의 암호화알고리즘을 적용하는 컴퓨터 시스템 또는 통신망에 적용될 수 있으며, 또한 휴대가능한 집적회로 카드(또는 스마트카드)에 내장되어 운용될 수 있다.
본 발명에 따른 실시예는 적어도 1024비트 이상의 큰 정수를 기반으로 하는 모듈로 곱셈 연산에 적용될 수 있다.
본 발명은 모든 종류의 모듈로 곱셈 연산장치에 사용될 수 있지만 편의상 radix-4 구조이고 몽고메리 알고리즘을 사용하는 모듈로 곱셈 연산장치를 기준으로 설명하기로 한다.
즉, 본 발명의 실시예에서는, 모듈러스의 길이가 n이고 곱셈연산을 위한 누산은 클럭신호의 싸이클에 따라 디지트(N) 단위로 수행된다. 여기서, n = 2N이다. 예컨대 n이 1024라면 N은 512가 된다. 본 발명의 실시예에 관한 설명 또는 도면들에서 문자부호 "I"는 0 ~ N-1 중 하나의 디지트 순서값을 나타낸다.
도 1은 본 발명에 따른 모듈로곱셈 연산장치의 구성을 보여 준다.
도 1의 모듈로곱셈 연산장치는 모듈러스 레지스터 M_REG, 피승수 레지스터 A_REG, 승수 레지스터 B_REG, 4:1 멀티플렉서들 13 및 23, 모듈러스 재부호화기 70, 부스 재부호화기 80, 앤드게이트회로들 43 및 45, 반가산기 47, 컴프레서 네트워크 50, 누산기 100, 덧셈기들 53 및 57, 플립플럽들 61~65, 그리고 래치들 66~69를 포함한다.
누산기 100은 컴프레서 네트워크 50과 캐리 레지스터 C_REG 및 섬 레지스터 S_REG으로 구성된다. 누산기 100으로부터 최종결과값 SN[n:0]이 산출된다.
여기서, 레지스터들 A_REG, B_REG, M_REG, C_REG 및 S_REG와 플립플럽들 61~65는 클럭 CK의 상승 에지(rising edge)에 응답하여 동작하고, 래치들 66~69는 클럭 CK가 로우레벨인 동안에 입력을 통과시킨다.
레지스터들 M_REG, A_REG, C_REG 및 S_REG는 병렬 입출력형(PIPO; Parallel-In parallel-Out) 레지스터들이다. 레지스터들 M_REG, A_REG, C_REG 및 S_REG는 N+1(= (n/2)+1)회의 반복연산이 진행되어 최종 결과값 SN[n:0]이 산출될 때까지 클럭 CK의 매 싸이클에 응답하여 동작한다.
모듈러스 레지스터 M_REG는 n비트로 된 모듈러스 M[n-1:0]을 저장한다. 몽고메리 알고리즘에 따르면 모듈러스 M은 항상 홀수이므로 모듈러스 레지스터 M_REG의 마지막 비트위치(LSB)는 항상 "1"로 설정되어 있다. 또한, 모듈러스 M은 항상 양수이므로 부호비트를 포함하지 않는다. 피승수 레지스터 A_REG는 n+1비트의 길이로 되어 있으며 피승수 A[n:0]를 저장한다. 피승수 레지스터 A_REG의 길이가 n+1인 것은, 피승수 A가 양수와 음수 모두 가능하므로 부호비트(n번째, 즉 최상위 비트 SA)를 포함시켜야 하기 때문이다. 승수 레지스터 B_REG는 병렬-입력/직렬-출력(PISO; Parallel-In Serial-Out) 레지스터이며 승수 B를 저장한다. 승수 B에는 부호비트와 짝수의 비트길이를 맞추기 위한 비트가 포함되어야 하므로, 승수레지스터 B_REG는 n+2의 비트길이로 되어 있으며 최상위 비트인 n번째 비트와 n+1번째 비트가 부호(SB)를 나타낸다. 승수 레지스터 B_REG는 매 클럭싸이클마다 2비트씩 우측 쉬프트동작을 수행한다. 승수 레지스터 B_REG는 매 클럭싸이클마다 우측 쉬프트후에 하위 2비트 b1 및 b0와 이전 싸이클의 비트 bR을 부스 재부호화기 80으로 제공한다.
모듈러스 레지스터 M_REG로부터 제공되는 모듈러스 M과 모듈러스 M의 1의 보수값 M을 포함하여 모듈러스곱 MMI의 값들(M, 0, M, 2M)이 4:1 멀티플렉서 13에 인가된다. 한편, 피승수 레지스터 A_REG로부터 제공되는 피승수 A과 피승수 A의 1의 보수값 A를 포함하여 부분곱 PPI의 값들(2A, A, 0, A, 2A)이 4:1 멀티플렉서 23에 인가된다. 멀티플렉서들 13 및 23에 전달된 모듈러스곱 및 부분곱의 값들은 1의 보수값들(M, A, 2A)을 포함하고 있으며, 멀티플렉서들 13 및 23에 의해 선택된 후에 누산기 50에서 보상워드 CWI[1:0]이 반영된 연산을 통하여 2의 보수화될 것이다.
모듈러스 재부호화기 70은, 모듈러스곱 MMI의 값을 선택하기 위한 조합논리회로이다. 모듈러스 재부호화기 70의 입력은, 멀티플렉서 13을 제어하기 위한 신호 SEL_MM[1:0]로부터 플립플럽 61을 통하여 한 클럭싸이클만큼 지연되어 궤환되는 신호 SEL_MM_D[1:0], 모듈러스 레지스터 M_REG로부터 제공되는 모듈러스 M의 하위 2번째 비트 M[1], 부분곱의 하위 2비트 SPPI[1:0]와 섬워드의 하위 2비트 SI[1:0]의 합이 되는 부분누산합의 하위 2비트 SPPI[1:0]이다.
모듈러스 재부호화기 70의 출력은, 멀티플렉서 13을 제어하여 모듈러스곱 MMI의 값들 중 하나를 선택하기 위한 신호 SEL_MM[1:0], 멀티플렉서 13의 출력이 누산기 100의 5-2 컴프레서 네트워크 50으로 전송되는 것을 통제하는 앤드게이트회로 43을 제어하기 위한 신호 EN_MM, 그리고 반가산기 47로 인가되어 선택된 모듈러스곱 MMI의 비트반전 여부를 알려주기 위한 제어신호 NEG_MM이다.
여기서, 모듈러스 재부호화기 70의 출력들 중에서, 제어신호 SEL_MM[1:0]은 플립플럽 61을 통하여 한 클럭싸이클만큼 지연되어 궤환입력되는 한편 클럭 CK가 로우레벨인 때에 래치 66을 통하여 멀티플렉서 13으로 인가된다. 또한, 제어신호 EN_MM은 클럭 CK가 로우레벨인 때에 래치 67을 통하여 앤드게이트회로 43으로 인가된다. 모듈러스 재부호화기 70에 관련된 상기 플립플럽 61과 래치들 66 및 67은, 모듈러스곱의 값과 부분곱의 값의 발생시점이 서로 다름에 따른 전력소모의 문제 또는 동작속도상의 한계를 극복하는데 기여한다.
아래의 표 1은 모듈러스 재부호화기 70의 진리표(truth table)로서, 입출력 값에 따라 멀티플렉서 13에 입력된 모듈러스곱 MMI의 값들(M, 0, M, 2M; 또는 -1M, 0, +1M, +2M) 중에서 선택되는 모듈러스곱 MMI의 값을 나타낸다.
입 력
|
출 력
|
선택된 MM
I
[n+1:0]
|
M1
|
SPP
I
[1]
|
SPP
I
[0]
|
SEL_MM[1:0]
|
EN_MM
|
NEG_MM
|
0 |
0 |
0 |
SEL_MM_D[1:0] |
0 |
0 |
0 |
0 |
0 |
1 |
10 |
1 |
1 |
-1M |
0 |
1 |
0 |
11 |
1 |
0 |
+2M |
0 |
1 |
1 |
00 |
1 |
0 |
+1M |
1 |
0 |
0 |
SEL_MM_D[1:0] |
0 |
0 |
0 |
1 |
0 |
1 |
00 |
1 |
0 |
+1M |
1 |
1 |
0 |
11 |
1 |
0 |
+2M |
1 |
1 |
1 |
10 |
1 |
1 |
-1M |
모듈러스 재부호화기 70에 의해 선택된 모듈러스곱 MMI의 값은 모듈러스 M의 2배수를 위한 비트와 부호비트를 포함하는 n+2 비트의 길이를 가지며 5-2 컴프레서네트워크 50으로 입력된다. 모듈러스 재부호화기 70에 의해 모듈러스곱의 값이 선택되고 또한 누산기 100의 컴프레서 네트워크 50으로 전달되는 과정에 관한 보다 구체적인 설명은 후술될 것이다.
도 2는 표 1에 따라 설계된 모듈러스 재부호화기 70의 상세회로의 일례를 보여 준다. 도 2를 참조하면, 모듈러스 재부호화기 70은, 8개의 입력터미널 E0~E7과 3개의 제어터미널 G0~G2 및 1개의 출력터미널 Z로 이루어진 8:1 멀티플렉서들 71 및 72, 제어신호 NEG_MM을 출력하는 논리회로 73, 그리고 제어신호 EN_MM을 출력하는 오아게이트 OR1로 구성된다. 논리회로 73은, M1 및 SPPI[1]를 입력하는 익스클루시브 노아게이트 XN1, 그리고 익스클루시브 노아게이트 XN1의 출력과 SPPI[0]를 입력하여 제어신호 NEG_MM을 출력하는 앤드게이트 AN1로 구성된다. 오아게이트 OR1은 SPPI[1] 및 SPPI[0]을 입력하여 제어신호 EN_MM을 출력한다.
8:1 멀티플렉서들 71 및 72로부터는 각각 제어신호 SEL_MM[1:0]의 상위비트 SEL_MM[1] 및 하위비트 SEL_MM[0]가 각각 출력된다. 8:1 멀티플렉서들 71 및 72의 제어터미널 G2, G1 및 G0에는 각각 M1, SPPI[1] 및 SPPI
[0]가 공통으로 인가된다. 8:1 멀티플렉서 71의 입력터미널 E0, E1, E2, E3, E4, E5, E6 및 E7에는 각각 SEL_MM_D[1], 0, 1, 0, SEL_MM_D[1], 0, 1 및 0이 입력된다. 8:1 멀티플렉서 72의 입력터미널 E0, E1, E2, E3, E4, E5, E6 및 E7에는 각각 SEL_MM_D[0], 0, 1, 0, SEL_MM_D[0], 0, 1 및 0이 입력된다.
도 2에 보인 8:1 멀티플렉서(71 또는 72)는 8개의 입력터미널들 및 3개의 제어터미널에 인가되는 신호들의 값에 따라 그 출력값이 달라질 수 있으나, 도 4에 그 일례를 보인 바와 같이, 앤드게이트들 AN11~AN18과 오아게이트 OR11로써 간단히 구성할 수 있다. 아래의 식 1은 8:1 멀티플렉서의 불리언(Boolean) 방정식을 나타낸다.
Z = G2 ㆍG1ㆍG0ㆍE7 + G2ㆍG1ㆍG0
BㆍE6
+ G2ㆍG1BㆍG0ㆍE5 + G2ㆍG1BㆍG0
BㆍE4
+ G2BㆍG1ㆍG0ㆍE3 + G2BㆍG1ㆍG0
BㆍE2
+ G2BㆍG1BㆍG0ㆍE1 + G2BㆍG1BㆍG
0BㆍE0 식 1
식 1에서 G0B~G2B는 G0~G2의 반전비트를 나타낸다.
도 2의 논리회로 73은, M1과 SPPI[1]을 입력하는 익스클루시브 오아게이트 XR1과, 익스클루시브 노아게이트 XN1의 출력과 SPPI[0]을 입력하여 제어신호 NEG_MM을 발생하는 앤드게이트 AN1으로 구성된다.
한편, 다시 도 1을 참조하면, 부스 재부호화기 80은, 부분곱 PPI의 값을 선택하기 위한 조합논리회로이다. 부스 재부호화기 80의 입력은, 멀티플렉서 23에 전송된 부분곱 PPI의 값들 중 하나를 선택하기 위한 신호 SEL_PP[1:0]가 플립플럽 62를 통하여 한 클럭싸이클만큼 지연되어 궤환된 신호 SEL_PP_D[1:0], 피승수 A의 하위 2비트 A[1:0], 그리고 승수 B의 하위 2비트 b1 및 b0와 2비트만큼 우측 쉬프트된 비트 bR이다. 우측 쉬프트된 비트 bR은 플립플럽 FF를 통하여 부스 재부호화기 80으로 공급된다. 부스 재부호화기 80으로 피승수 A의 하위 2비트 A[1:0]이 입력되는 것은 부스 재부호화기 80으로부터 부분곱의 하위 2비트 PPI[1:0]를 생성하기 위함이다.
부스 재부호화기 80의 출력은, 멀티플렉서 23에 전송된 부분곱 PPI의 값들 중 하나를 선택하기 위하여 멀티플렉서 23으로 인가될 제어신호 SEL_PP[1:0], 멀티플렉서 23의 출력이 누산기 100의 5-2 컴프레서 네트워트 50으로 전송되는 것을 통제하는 앤드게이트회로 45를 제어하기 위한 신호 EN_PP, 선택된 부분곱 PPI의 비트반전 여부를 결정하기 위하여 반가산기 47로 인가될 제어신호 NEG_PP, 그리고 덧셈기 57에서 섬워드의 하위 2비트 SI[1:0]과 더해질 부분곱의 하위 2비트 PPI[1:0]이다.
여기서, 제어신호 SEL_PP[1:0]는 플립플럽 62와 래치 68을 통하여 4:1 멀티플렉서 23에 인가된다. 제어신호 EN_PP는 플립플럽 63과 래치 69를 통하여 앤드게이트회로 45에 인가된다. 제어신호 NEG_PP는 플립플럽 64를 통하여 반가산기 47에 인가된다. 또한, 부분곱의 하위 2비트 PPI[1:0]은 플립플럽 65를 통하여 덧셈기 57에 인가된다. 부스 재부호화기 80에 관련된 상기 플립플럽들 62~64와 래치들 68 및 69는, 모듈러스곱의 값과 부분곱의 값의 발생시점이 서로 다름에 따른 전력소모의 문제 또는 동작속도상의 한계를 극복하는데 기여한다.
아래의 표 2는 부스 재부호화기 80의 입출력 관계를 보여주는 진리표로서, 선택되는 부분곱 PPI의 값들(2A, A, 0, A, 2A; 또는 -2A, -1A, 0, +A, +2A)과 부분곱의 하위 2비트 PPI[1:0]의 값들을 나타낸다.
입 력
|
출 력
|
선택된 PP
I
[n+1:0]
|
b
1
|
b
0
|
b
R
|
SEL_PP[1:0]
|
EN_PP
|
NEG_PP
|
PP
I
[1;0]
|
0 |
0 |
0 |
SEL_PP_D[1:0] |
0 |
0 |
00 |
0 |
0 |
0 |
1 |
00 |
1 |
0 |
{A[1],A[0]} |
+1A |
0 |
1 |
0 |
00 |
1 |
0 |
{A[1],A[0]} |
+1A |
0 |
1 |
1 |
11 |
1 |
0 |
{A[0],0} |
+2A |
1 |
0 |
0 |
01 |
1 |
1 |
{A[0],0} |
-2A |
1 |
0 |
1 |
10 |
1 |
1 |
{A[1]^A[0],A[0]} |
-1A |
1 |
1 |
0 |
10 |
1 |
1 |
{A[1]^A[0],A[0]} |
-1A |
1 |
1 |
1 |
SEL_PP_D[1:0] |
0 |
0 |
00 |
0 |
제어신호 NEG_PP는 모듈러스 재부호화기 70로부터 제공되는 제어신호 NEG_MM과 함께 반가산기 47로 인가되어 2비트의 보상워드 CWI[1:0]가 누산기 100의 컴프레서 네트워크 50으로 입력되도록 한다. 부스 재부호화기 80에 의해 부분곱의 값이 선택되고 또한 누산기 100의 컴프레서 네트워크 50으로 전달되는 과정에 관한 보다 구체적인 설명은 후술될 것이다.
도 3은 표 2에 따라 설계된 부스 재부호화기 80의 상세회로의 일례를 보여 준다. 도 3을 참조하면, 부스 재부호화기 80은, 8개의 입력터미널 E0~E7과 3개의 제어터미널 G0~G2 및 1개의 출력터미널 Z로 이루어진 4개의 8:1 멀티플렉서들 81~84, 제어신호 EN_PP를 출력하는 논리회로 85, 그리고 제어신호 NEG_PP를 출력하는 논리회로 86으로 구성된다. 8:1 멀티플렉서들 81~84의 기본적인 회로구성은 도 4에 보인 것과 동일하다.
4개의 8:1 멀티플렉서들 81~84로부터 각각 멀티플렉서 23에 인가되는 제어신호 SEL_PP[1:0]의 상위비트 SEL_PP[1], 제어신호 SEL_PP[1:0]의 하위비트 SEL_PP[0], 부분곱의 하위 두번째 비트 PPI[1], 부분곱의 하위 첫번째 비트 PPI[0]이 각각 출력된다. 8:1 멀티플렉서들 81~84의 제어터미널 G2, G1 및 G0에는 각각 b1, b0 및 bR이 공통으로 인가된다. 8:1 멀티플렉서 81의 입력터미널 E
0, E1, E2, E3, E4, E5, E6 및 E7에는 각각 SEL_PP_D[1], 0, 0, 1, 0, 1, 1 및 SEL_PP_D[1]이 배정된다. 8:1 멀티플렉서 82의 입력터미널 E0, E1, E2, E3, E4, E5, E6 및 E7에는 각각 SEL_PP_D[0], 0, 0, 1, 1, 0, 0 및 SEL_PP_D[0]이 배정된다. 8:1 멀티플렉서 83의 입력터미널 E0, E1, E2, E3, E4, E5, E6 및 E7에는 각각 0, A[1], A[1], A[0], A[0]. A[1]^A[0], A[1]^A[0] 및 0이 배정된다. 입력값 A[1]^A[0]는 A[1] 및 A[0]이 익스클루시브 오아게이트 XR1을 통하여 만들어진 값이다. 8:1 멀티플렉서 84의 입력터미널 E0, E1, E2, E3, E4, E5, E6 및 E7에는 각각 0, A[0], A[0], 0, 0, A[0], A[0] 및 0이 배정된다.
제어신호 EN_PP를 출력하는 논리회로 85는, b1, b0 및 bR을 공통으로 입력하는 낸드게이트들 ND3 및 ND4와, 낸드게이트들 ND3 및 ND4의 출력을 입력하여 제어신호 EN_PP를 발생하는 앤드게이트 AN2로 구성된다. 제어신호 NEG_PP를 발생하는 논리회로 86은, b0 및 bR을 입력하는 낸드게이트 ND5와, 낸드게이트 ND5의 출력과 b1을 입력하여 제어신호 NEG_PP를 발생하는 앤드게이트 AN3으로 구성된다.
기본적으로, 도 1에서, 누산기 100에 입력된 모듈러스곱 MMI[n+1:0]과 부분곱 PPI[n+1:0]은 컴프레서 네트워크 50에서 캐리-세이브 모드로 동작하는 주연산과정과, 캐리레지스터 C_REG 및 섬레지스터 S_REG에 각각 저장된 캐리워드와 섬워드를 합산하여 그 결과를 다시 섬레지스터 S_REG에 저장하는 후변환과정(캐리-전파 모드)을 통하여 최종값 SN[n:0]이 생성된다. 캐리-세이브 동작모드의 주연산과정에서 캐리전파모드의 후변환과정으로의 전환은, 컴프레서 네트워크 50을 제어하는 신호 SW가 "0"에서 "1"로 천이됨에 따른다. 또한, 모듈러스곱 MMI의 선택에 참여하는 부분누산합의 하위 2비트 SPPI[1:0]를 만들기 위하여, 캐리레지스터 C_REG와 섬레지스터 S_REG로부터 추출된 하위 2비트의 캐리워드 CI[1:0] 및 섬워드 SI[1:0]는 덧셈기 53을 통하여 합산된 다음(SI[1:0]), 그 합산된 결과인 2비트의 섬워드 SI[1:0]는 다시 덧셈기 57에서 부분곱의 하위 2비트 PPI[1:0]과 합산된다. 누산기 100에서, S_CUR[n:0] 및 C_CUR[n+1:0]는 현재 처리되는 섬워드와 캐리워드를 각각 가리키며, S_NXT[n:0] 및 C_NXT[n+1:0]는 n+1회의 반복연산과정에서 다음에 처리될 섬워드와 캐리워드를 각각 가리킨다. 덧셈기 57로부터 생성된 2비트의 부분누산합 SPPI[1:0]은 모듈러스 재부호화기 70으로 인가된다.
이상의 구성과 기본적인 동작상태에 관한 설명을 참조하여, 본 발명에 따라 모듈러스곱과 부분곱의 값들이 누산기 100에 도달되는 시점을 일치시킴으로써 불필요한 신호천이 또는 글리치현상으로 인한 전력소모를 방지하는 과정에 관하여 설명한다.
도 1에 보인 본 발명의 모듈로곱셈 연산장치는, 클럭 CK의 상승에지에 응답하는 플립플럽들 61~65의 동작시점을 기준으로 전과정("부스 재부호화기 루우프")과 후과정("모듈러스 재부호화기 루우프")이 시간적으로 동시에 수행되는 2-스테이지 파이프라인(2-stage pipleline) 동작을 수행한다. 2-스테이지 파이프라인 동작에 관하여는 도 6에 도시되어 있으며, 이하 참조된다.
여기서, "부스 재부호화기 루우프"는 부분곱 PPI의 값이 선택되어 누산기 100에 입력되는 경로에 해당한다. "모듈러스 재부호화기 루우프"는 누산기 100을 통하여 생성된 2비트의 섬워드 SI[1:0]와 부분곱의 하위 2비트 PPI[1:0]이 합산되어 생성된 부분누산합 SPPI[1:0]이 모듈러스 재부호화기 70으로 입력된 후 모듈러스곱의 값이 선택되어 누산기 100에 입력되는 경로를 포함한 궤환경로이다.
그러므로, 전과정에 해당하는 "부스 재부호화기 루우프"는 궤환경로에서 제외되어 후과정보다 짧은 시간에 수행됨에 따라 클럭의 동작주파수를 높일 수 있다. 이는 도 1에 보인 플립플럽들 61~65이 이전 싸이클의 해당하는 입력값들을 저장하고 있기 때문에 가능하다. 즉, 플립플럽들 61~65가 이전 사이클의 해당하는 입력값들을 저장하고 있는 동안, 전과정에 속하는 연산과정이 동시에 진행된다.
예를 들면, 부스 재부호화기 80으로부터 제공되는 제어신호 SEL_PP[1:0]는 임의의 클럭싸이클에서 클럭 CK의 상승에지에 응답하여 플립플럽 62에 저장된다. 일단의 저장된 SEL_PP[1:0]는 새로운 클럭싸이클에서 새로운 값이 제공되지 않는 한 이전 상태를 그대로 유지한다. 마찬가지로, 플립플럽 63이 이전상태의 EN_PP의 값을 저장하고 있는 클럭싸이클 동안, 전술한 전과정을 통하여 부분누산합의 하위 2비트 SPPI[1:0]이 생성되어 EN_MM이 발생된다. 또한, 플립플럽 64가 이전상태의 NEG_PP의 값을 저장하고 있는 클럭싸이클 동안, 전술한 전과정을 통하여 부분누산합의 하위 2비트 SPPI[1:0]이 생성되어 NEG_MM이 발생된다.
본 발명에 따른 2-스테이지 파이프라인 동작 타이밍을 보여주는 도 6을 참조하면, 매 클럭마다 부스 재부호화기 80으로 인가되는 디지트 단위의 승수값들 B_LSD0~B_LSDN에 응답하여 두번째의 클럭 1로부터 클럭 N+1에 이르기까지 부분곱의 값들 PP0~PPN과 모듈러스곱의 값들 MM0~MMN이 생성됨을 볼 수 있다.
이를 파이프라인 방식이 적용되지 않은 도 5와 비교하면, 도 6에서 부분곱 및 모듈러스곱의 값들이 생성되는 시점이 도 5의 경우에 비하여 약 한 클럭싸이클만큼 늦고 부분곱 및 모듈러스곱의 값들의 생성이 완료되는 클럭싸이클 수에 있어서 도 6이 N+3인 반면 도 5는 N+2이지만, 도 6에 보인 최소 클럭싸이클 주기 T2는 일반적인 반도체 공정에서 도 5의 최소 클럭싸이클 주기 T1의 약 0.7배로서 T1보다 짧다. 따라서, 그에 따른 동작상의 성능이득은 약 1.4배(≒(10/7)*((N+2)/(N+3)))이다. 또한, N = 512(모듈러스 M의 비트길이가 1024인 경우)이고 T1이 10ns라고 가정하면, 총 싸이클타임에 있어서도 도 6의 본 발명의 경우가 514싸이클 * 7ns로서 이는 도 5의 경우인 513싸이클 * 10ns보다 짧음을 알 수 있다.
한편, 4:1 멀티플렉서 13에서의 모듈러스곱의 값을 선택하기 위한 제어신호 SEL_MM[1:0]과 4:1 멀티플렉서 23에서의 부분곱의 값을 선택하기 위한 제어신호 SEL_PP[1:0]이 각각 래치 66 및 플립플롭 62에서 클럭이 로우상태인 동안 래치되어 있기 때문에, 멀티플렉서들 13 및 23으로부터의 출력이 새로운 값으로 갱신되는 시점이 일치된다.
즉, 부스 재부호화기 80으로부터 제공되는 제어신호 SEL_PP[1:0]가 플립플럽 62을 통하여 래치 68에 저장되어 있는 동안, 부분누산합의 하위 2비트 SPPI[1:0]이 모듈러스 재부호화기 70의 8:1 멀티플렉서들 71 및 72에 전송된 다음 제어신호 SEL_MM[1:0]이 발생되어 래치 66에 저장된다. 그리고, 클럭 CK가 로우레벨인 때에 SEL_MM[1:0]과 SEL_PP[1:0]가 동시에 멀티플렉서 13 및 23에 인가됨으로써, 멀티플렉서들 13 및 23의 출력 갱신시점이 동기화되는 것이다.
이와 아울러, 멀티플렉서 13의 출력의 누산기 100으로의 전송을 통제하는 앤드게이트회로 43을 제어하기 위한 신호 EN_MM과, 멀티플렉서 23의 출력의 누산기 100으로의 전송을 통제하는 앤드게이트회로 45를 제어하기 위한 신호 EN_PP에 대하여도, 전술한 SEL_MM[1:0] 및 SEL_PP[1:0]의 경우와 마찬가지로, 래치들 67 및 69를 통하여 앤드게이트회로들 43 및 45로의 인가시점을 동기화시킨다. 즉, 모듈러스 재부호화기로부터 발생되는 제어신호 EN_MM도 후과정에 속하는 부분누산합의 하위 2비트 SPPI[1:0]에 응답하여 출력되기 때문에, 부스 재부호화기 80으로부터 출력되는 전과정에 속하는 제어신호 EN_PP는 EN_MM이 발생되기까지 래치 69에서 대기하다가 앤드게이트회로들 43 및 45로 동시에 인가된다.
결과적으로, 멀티플렉서들 13 및 23로부터 누산기 100까지의 경로에 걸쳐서, 모듈러스곱 MMI[n+1:0]과 부분곱 PPI[n+1:0]의 값들이 매 경로 단계마다 갱신되는 시점을 일치시킴에 따라, 인가 시점의 불일치로 인하여 발생되는 불필요한 신호천이 또는 글리치에 의해 소모되는 동작상의 전력을 줄일 수 있다.
한편, 본 발명에서는, 매 클럭마다 사용하였던 SEL_MM[1:0]과 SEL_PP[1:0]을 플립플럽 61 및 62에 각각 저장해 두고, 현재 클럭싸이클의 모듈러스곱의 값 또는 부분곱의 값이 "0"으로 선택되어야 하는 경우(표 1 또는 표 2 참조)에, 이전 싸이클의 SEL_MM[1:0]의 값 SEL_MM_D[1:0] 또는 이전 싸이클의 SEL_PP[1:0]의 값 SEL_PP_D[1:0]을 이용한다. 따라서, 현재 클럭싸이클의 모듈러스곱의 값 또는 부분곱의 값이 "0"으로 선택되어야 하는 경우에, SEL_MM[1:0] 또는 SEL_PP[1:0]의 값이 불필요하게 변하는 것을 방지하여 동작상의 전력소모를 줄인다. 즉, 이 경우에는, 전술한 표 1 또는 표 2에 보인 바와 같이, 앤드게이트회로 43 및 45를 제어하는 신호 EN_MM 또는 EN_PP가 "0"이기 때문에, SEL_MM[1:0] 또는 SEL_PP[1:0]의 값에 상관없이 누산기 100으로 입력되는 모듈러스곱 또는 부분곱의 값이 "0"으로 된다.
다른 한편으로, 본 발명에서는, 인접한 싸이클에서 SEL_PP[1:0]이 갖는 평균 해밍 디스턴스(hamming distance; 같은 비트 수를 갖는 2진 부호 사이에 대응되는 비트값이 일치하지 않는 것의 개수)가 최소값을 갖도록 부호화함으로써 동작상의 전력소모를 줄일 수 있다. 이를 설명하면 다음과 같다.
부스 재부호화기 80에 의해 I번째 싸이클에서 선택된 부분곱 PPI와 I+1번째 싸이클에서 선택된 부분곱 PPI+1사이에는 다음의 식 2와 같은 관계가 존재한다.
PPI = +A 또는 +2A -> PPI+1 ≠ +2A (즉, PPI+1 ∈ {-2A, -A, 0, +A})
PPI = -A 또는 -2A -> PPI+1 ≠ -2A (즉, PPI+1 ∈ {-A, +A, 0, +2A}) 식 2
즉, I번째 싸이클의 부분곱이 +A 또는 +2A일 때 I+1번째 싸이클의 부분곱은 +2A가 될 수 없고, 또한 I번째 싸이클의 부분곱이 -A 또는 -2A일 때 I+1번째 싸이클의 부분곱은 -2A가 될 수 없다. 아런 관계를 이용하면, 인접한 두 싸이클의 SEL_PP[1:0]사이에서 나타나는 평균 해밍 디스턴스가 가장 작은 값이 되도록 SEL_PP[1:0]를 부호화할 수 있다. 따라서, 평균 해밍 디스턴스가 작아진 만큼 동작상의 전력소모를 줄인다. 이를 구현하는 방법은 다음과 같다.
부분곱의 값 +A를 선택하는 SEL_PP[1:0]의 값과 +2A를 선택하는 SEL_PP[1:0]의 값이 서로 비트반전 관계가 되도록 하고, 부분곱의 값 -A를 선택하는 SEL_PP[1:0]의 값과 -2A를 선택하는 SEL_PP[1:0]의 값이 서로 비트반전 관계가 되도록 한다.
앞서 보인 표 2를 참조하면, 부분곱의 값 +A를 선택하는 SEL_PP[1:0]의 값은 "00"이고, +2A를 선택하는 SEL_PP[1:0]의 값은 "11"이다. 또한, 부분곱의 값 -A를 선택하는 SEL_PP[1:0]의 값은 "10"이고, -2A를 선택하는 SEL_PP[1:0]의 값은 "01"이다.
이와같은 SEL_PP[1:0]의 부호화 방식을 사용하면, I번째 싸이클의 부분곱이 +2A이고 I+1번째 싸이클의 부분곱이 +A인 경우와 I번째 싸이클의 부분곱이 -2A이고 I+1번째 싸이클의 부분곱이 -A인 경우에서만 SEL_PP[1:0]의 해밍 디스턴스가 2이고 나머지 경우는 모두 SEL_PP[1:0]의 해밍 디스턴스가 1 또는 0이다.
상술한 실시예에서 보인 본 발명의 수단 또는 방법에 준하여 본 발명의 기술분야에서 통상의 지식을 가진 자는 본 발명의 범위내에서 본 발명의 변형 및 응용이 가능하다. 예를 들면, 도 2 내지 도 3에 보인 모듈러스 재부호화기 및 부스 재부호화기의 회로들은 관련된 표 1 내지 표 2에 보인 진리표에 맞도록 설계함에 있어서 다양한 논리 조합들이 가능할 것이다. 그리고, 신호 및 데이터를 저장하는 회로로서 발명의 상세 설명에 사용된 레지스터, 플립플롭, 래치 등의 데이터 저장회로들 역시, 회로의 구현시 데이터를 저장하는 회로의 범주 내에서 다양한 형태로 변형 가능하다.