KR20050077001A - 다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합잉여 연산 회로 - Google Patents

다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합잉여 연산 회로 Download PDF

Info

Publication number
KR20050077001A
KR20050077001A KR1020040063153A KR20040063153A KR20050077001A KR 20050077001 A KR20050077001 A KR 20050077001A KR 1020040063153 A KR1020040063153 A KR 1020040063153A KR 20040063153 A KR20040063153 A KR 20040063153A KR 20050077001 A KR20050077001 A KR 20050077001A
Authority
KR
South Korea
Prior art keywords
multiplication
data
memory
mac
bits
Prior art date
Application number
KR1020040063153A
Other languages
English (en)
Other versions
KR100682354B1 (ko
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 후지쯔 가부시끼가이샤
Publication of KR20050077001A publication Critical patent/KR20050077001A/ko
Application granted granted Critical
Publication of KR100682354B1 publication Critical patent/KR100682354B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/728Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)

Abstract

본 발명은 싱글 포트 메모리를 이용해도 효율적으로 곱합 연산이 가능한 다배장 데이터(多倍長: multiple-word) 곱합 연산 처리 회로를 제공하는 것을 목적으로 한다.
MAC(12)은 비트폭이 다른 승수와 피승수로 곱합 연산 처리를 하고, 레지스터(13, 14, 15, 16, 17)는 그 비트폭에 따라서 MAC(12)에 있어서의 1클록 시간에서의 소비 데이터량과 생성 데이터량의 총합이 메모리(11)에 있어서의 1클록 시간에서의 전송 가능 데이터량이 되도록 다배장 데이터 중 1클록 시간에서 MAC(12)에 공급하는 데이터량을 조정하기 때문에 싱글 포트의 메모리(11)의 데이터 전송 능력이라도 MAC(12)의 회로 사용 효율을 내리는 일은 없다.

Description

다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합 잉여 연산 회로{MULTIPLE-WORD MULTIPLICATION-ACCUMULATION CIRCUIT AND MONTGOMERY MODULAR MULTIPLICATION-ACCUMULATION CIRCUIT}
본 발명은 다배장 데이터(多倍長: multiple-word) 곱합(곱셈덧셈) 연산 처리 회로 및 몽고메리 곱합 잉여 연산 회로에 관한 것이며, 특히 몽고메리 곱합 잉여 연산에 적합하게 사용 가능한 다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합 잉여 연산 회로에 관한 것이다.
최근, 전자 상거래(E커머스) 등과 같이 네트워크 상에서 금전 교환을 하는 시장이 넓어지고, 크레디트 카드 번호나 개인 정보 등의 중요한 정보를 네트워크를 통해 송수신하는 기회가 급속히 증대하고 있다.
이러한 중요한 정보가 네트워크 상에 흐르고 있는 동안에 악의 있는 제3자에 의해 정보가 도청이나 위조되는 것을 방지하기 위해서 정보의 암호화 기술은 빠뜨릴 수 없는 것으로 되어 있다.
암호화 기술 중 하나로 공개 열쇠 방식이 알려져 있다.
공개 열쇠 방식은 공개 열쇠와 비밀 열쇠의 한 쌍의 열쇠를 준비해 두고, 송신자가 수신자의 공개 열쇠로 암호화하여, 수신자는 수신자밖에 알 수 없는 비밀 열쇠로 복호화한다. 예컨대, 네트워크 상에서 상품을 구입하는 경우에 고객은 업자로부터 공개 열쇠를 받아, 이것에 의해서 크레디트 카드 번호 등의 정보를 암호화하여 송신한다. 업자는 비밀 열쇠에 의해서 수신한 정보를 복호화한다. 공개 열쇠를 널리 공개함으로써 불특정 다수의 사람과의 통신 비밀을 간단히 확보할 수 있다.
이러한 공개 열쇠 방식으로서 RSA(Rivest Shamir Adleman) 방식이 있다. RSA 방식에서는 곱셈 잉여 연산을 이용한다. 어떤 수를 몇 회나 곱셈하여 정수(n)로 나눈 나머지를 계산하는 것은 컴퓨터에 있어서 간단하지만, 그 역의 연산으로, 큰 정수(n)의 소인수 분해는 곤란한 성질을 이용한 암호화 방식이다.
그러나, RSA 방식에 있어서의 곱셈 잉여 연산의 계산량은 DES(Data Encryption Standard) 등의 대칭 암호 방식에 비교하면 많아지기 때문에 고속으로 계산할 수 있는 알고리즘이 요구되고 있다. 그 수단법의 하나에 몽고메리 곱합 잉여 연산법이 있다.
몽고메리 곱합 잉여 연산법은 정수 N과 정수 N과 서로 소로써 정수 N보다 큰 기수(基數) R에 대하여, T×R-1 modN을 0≤T≤R×N인 입력값 T로부터 N을 법(法)으로 한 기약(旣約)값으로 구하는 연산 방식이다. 또, R-1은 N을 법으로 하는 R의 곱셈 역원을 나타낸다(즉, R×R-1 modN=1을 만족한다). 이 방식은 곱셈 잉여 연산을, 감산을 반복하는 뺄셈을 이용하지 않고, 가산과 곱셈과 시프트 연산의 반복에 의해 N의 잉여값을 구하는 방식이며, N의 값이 매우 큰 경우에 알맞은 방법이다(예컨대, 비특허문헌 1 참조).
구체적인 처리 순서로서는 입력값 A, B, C, R, N, ND의 입력에 대하여 이하의 연산을 하여 출력값 X, Y를 출력한다. T, M의 값은 연산 중간치이다.
T=A×B+C...............(1)
M=T×NDmodR............(2)
X=(M×N+T)/R...........(3)
Y=X-N..................(4)
또, 입력값 ND는 R×R-1-N×ND=1의 조건을 만족하는 값이다.
0<Y의 경우는 출력값 X의 값이 연산 결과이며, 0≥Y의 경우는 출력값 Y의 값이 연산 결과가 된다.
입력값 A, B, C, N은 다배장의 값(예컨대 2048 bit)으로서, 메모리 영역에 워드마다 정렬하여 기억되어 있다. 입력값 R은 2의 누승값(예컨대 22048)이며, 값 그 자체가 아니라, 데이터 길이만의 정보가 기억되어 있다. 입력값 ND는 연산기의 비트폭만 필요한데, 그 이유는 후술한다.
식(1)의 곱합 연산을 실제로 행할 때는 연산기의 비트폭(예컨대 32 bit)이 고정되어 있는 곱합 연산기[이하 MAC(Multiplier Accumulator)라 약기한다]에 의해 (d,e)=a×b+c+d를 복수회 연산하여 행하는 것이 일반적이다. 또, d는 연산 결과의 상위 비트이며, 다음 사이클의 연산의 입력으로서 재이용하는 값이다. 또한, e는 연산 결과의 하위 비트이다.
이하에 식(1)의 곱합 연산할 때의 알고리즘을 나타낸다.
(1.1) for (i=0 to s-1) {
(1.2) a:=A[i]
(1.3) d:=0
(1.4) for (j=0 to s-1) {
(1.5) b:=B[j]
(1.6) if (i==0) c=C[j]
(1.7) else c=T[i+j]
(1.8) (d,e):=a×b+c+d
(1.9) T[i+j]:=e
(1.10) }
(1.11) T[i+s]:=d
(1.12) }
상기한 바와 같이, i와 j를 루프 변수로 한 2중 루프[행번호 (1.1)∼(1.12)의 외루프와, 행번호 (1.4∼1.10)의 내루프]로 하위 비트 측에서 반복한다. 여기서, 정수 s[행번호 (1.1), (1.4), (1.11)]는 데이터길이를 워드 길이로 나눈 숫자이다. 표기 중 변수의 다음 []의 값은 데이터의 중 워드 위치를 하위 측에서 나타내는 값이다. 예컨대, 워드 길이가 32비트이면, A[0]는 A의 하위 32비트의 값을 나타낸다.
도 11은 종래의 다배장 데이터 곱합 연산 처리 회로의 일례의 구성도이다.
종래의 다배장 데이터 곱합 연산 처리 회로(900)는 메모리(901)와, MAC(902)와, 레지스터(903, 904, 905, 906, 907)로 이루어진다. 메모리(901)상에는 연산에 필요한 다배장의 입력값 A, B, C가 존재한다. MAC(902)는 입력값 A, B, C를 워드마다 입력하여, 연산 처리를 하여, T=A×B+C를 메모리(901)상에 기록한다.
이하, 전술한 알고리즘에 의한 종래의 다배장 데이터 곱합 연산 처리 회로(900)의 동작을 설명한다.
우선, 도시하지 않은 제어 회로에서 루프 변수(i, j)가 작성되고, 메모리(901)에 대한 어드레스 입력이 된다. 다음에 메모리(901)로부터 워드 길이(W)분의 입력값 A[i], B[j], C[j] 혹은 C[j]의 대신에 T[i+j]를 판독하고, 이들을 a, b, c로서 레지스터(903, 904, 905)에 유지한 후, MAC(902)를 사용하여 행번호 1.8의(d,e):=a×b+c+d를 연산하여, d, e를 각각 레지스터(906, 907)에 유지시킨다. d는 다음 사이클의 연산의 입력으로서 재이용하고, e를 T[i+j]의 새로운 값으로서 메모리(901)에 기록 갱신한다.
이와 같이, 종래의 다배장 데이터 곱합 연산 처리 회로(900)에서는 전술한 알고리즘의 외루프 선두[행번호 (1.2)]에서 a를 판독해 두고, 그 후 내루프의 한 번의 처리에 관하여, b, c의 메모리(901)로부터의 판독 갱신과 e의 메모리에의 기록 갱신이 필요하게 된다. 파이프라인 동작을 중단하지 않고 MAC(902)를 클록 시간마다 동작시키기 위해서는 메모리(901)의 전송 능력이 1클록 시간에 3워드 길이(3 W)만큼 필요하게 된다.
그 때문에, 멀티포트 메모리로 하거나, 메모리(901)를 영역 분할하거나 함으로써 데이터의 전송 능력을 보충할 수 있는 회로 방식이 제안되어 있다(예컨대, 특허문헌 1 참조).
전술한 식(3)의 연산은 식(1)과 같은 처리가 된다. 또, R은 2의 누승값이기 때문에 R에서의 뺄셈은 비트 시프트 연산으로 실현할 수 있다.
식(1), (2), (3)의 연산은 독립적으로 행하면 입력값 ND이 다배장 필요하게 되기 때문에 효율적이지 않다. 그 때문에 비특허문헌 2에 있는 것과 같은 처리 수법이 일반적으로 알려져 있다. 그 처리 수법이란, 식(1)의 연산 처리 과정에서 연산 중간치(T)가 하위 측에서 순서대로 결정해 나갈 때에, 그 때마다, 연산 중간치(T)의 최하위 워드에 대하여, 식(2)의 연산 결과인 연산 중간치(M)의 최하위 워드를 연산 결정하고, 식(3)의 출력값 X를 연산해 나가는 방법이다. 이 경우 입력값 ND은 연산 워드 길이만으로 충분해진다.
[특허문헌 1] 특허 공개 2002-207589호 공보(도 1)
[비특허문헌 1] P. L. Montgomery: "Modular Multiplication without Trial Division", Mathematics of Computation, Vo1.44, No.170, pp.519-521(1985)
[비특허문헌 2] C. K. Koc. "High-Speed RSA Implementation", Technical Report TR201, RSA Laboratories, Version 2.0, November, pp.48-49(1994)
그러나, 데이터 전송 능력을 올리기 위해서 메모리를 멀티포트 메모리로 하는 것은 회로 소자의 사용 면적이 증가한다고 하는 문제가 있다. 또한 메모리를 분할하는 것은 레이아웃 설계가 된다고 하는 문제가 있었다.
한편, 메모리를 싱글포트 메모리로 한 경우에는 메모리 영역의 회로 규모의 감소는 도모할 수 있지만, 데이터 전송 능력이 1클록 시간에 1워드 길이(W)만이 된다. 이 경우, MAC를 클록마다 사용할 수 없고, MAC의 회로 규모에 대하여 효율적인 연산을 실시할 수 없는 문제가 발생한다. 예컨대, 전술한 식(1)과 같은 연산을 할 때에 MAC에 입력값 A, B, C의 1 W분을 클록에 따라서 순으로 입력하고 나서 연산하기 때문에 적어도 연산하는데 3클록마다의 연산밖에 할 수 없었다.
본 발명은 이러한 점을 감안하여 이루어진 것으로, 싱글포트 메모리를 이용하더라도 효율적으로 곱합 연산이 가능한 다배장 데이터 곱합 연산 처리 회로를 제공하는 것을 목적으로 한다.
또한 본 발명의 다른 목적은 싱글포트 메모리를 이용하더라도 효율적으로 몽고메리 곱합 잉여 연산이 가능한 몽고메리 곱합 잉여 연산 회로를 제공하는 것이다.
본 발명에서는 상기 문제를 해결하기 위해서 도 1에 도시한 바와 같이 다배장 데이터에 대하여 곱합 연산 처리를 하는 다배장 데이터 곱합 연산 처리 회로(10)에 있어서 다배장 데이터를 기억하는 메모리(11)와, 비트폭이 다른 승수와 피승수로 곱합 연산 처리를 하는 MAC(12)와, 그 비트폭에 따라서 MAC(12)에 있어서의 1클록 시간에서의 소비 데이터량과 생성 데이터량의 총합이 메모리(11)에 있어서의 1클록 시간에서의 전송 가능 데이터량이 되도록 다배장 데이터 중 1클록 시간에서 MAC(12)에 공급하는 데이터량을 조정한 복수의 레지스터(13, 14, 15, 16, 17)를 갖는 것을 특징으로 하는 다배장 데이터 곱합 연산 처리 회로(10)가 제공된다.
상기한 구성에 따르면 MAC(12)는 비트폭이 다른 승수와 피승수로 곱합 연산 처리를 하고, 레지스터(13, 14, 15, 16, 17)는 그 비트폭에 따라서 MAC(12)에 있어서의 1클록 시간에서의 소비 데이터량과 생성 데이터량의 총합이 메모리(11)에 있어서의 1클록 시간에서의 전송 가능 데이터량이 되도록 다배장 데이터 중 1클록 시간에서 MAC(12)에 공급하는 데이터량을 조정하기 때문에 싱글포트의 메모리(11)의 데이터 전송 능력이라도 MAC(12)의 회로 사용 효율을 내리는 일은 없다.
이하, 본 발명의 실시형태를 도면을 참조하여 상세히 설명한다.
또, 이하에서는 기수 R을 2의 누승수, 정수 N을 홀수값으로서 설명을 한다.
도 1은 본 발명의 실시형태의 다배장 데이터 곱합 연산 처리 회로의 원리도이다.
본 발명의 실시형태의 다배장 데이터 곱합 연산 처리 회로(10)는 다배장 데이터인 입력값 A, B, C에 의해 A×B+C의 연산을 하는 회로이며, 메모리(11)와, MAC(12)와, 레지스터(13, 14, 15, 16, 17)를 갖는다.
메모리(11)는 싱글포트 메모리이며, 예컨대, 2048비트의 다배장 데이터인 입력값 A, B, C 및 연산 결과를 기억한다. 이하, 메모리(11)의 1클록 시간에서의 전송 가능 데이터량을 1워드(1 W)길이분으로 한다.
MAC(12)는 입력값 A, B, C 중, 예컨대 입력값 A를 피승수, 입력값 B를 승수로 한 경우, 비트폭이 다른 승수와 피승수로 곱합 연산을 한다. 즉, 피승수의 입력값 A를 3워드 길이(3×W)분의 비트폭, 승수인 입력값 B를 3분의 1워드 길이(W/3)분의 비트폭으로서 곱합 연산 A×B+C를 행하여, 연산 결과를 출력한다.
레지스터(13)는 다배장 데이터의 입력값 A를 3워드 길이분(3×W) 기억한다. 또, 도면 중의 "A[i]"의 "i"는 입력값 A의 데이터길이를 워드 길이로 나눈 값을 "s"로 했을 때에 0≤i≤s-1이 되는 값이며, 다배장 데이터 중 워드 위치를 하위측에서 나타내는 값이다. 따라서, 레지스터(13)는 하위로부터 i번째의 1워드 길이분의 데이터인 A[i]와, i+첫번째의 A[i+1], i+2번째의 A[i+2]의 계(計) 3워드분을 기억한다. 그리고 이 3워드분을 "a"로서 MAC(12)에 입력한다.
레지스터(14, 15)는 입력값 B 및 입력값 C를 1워드분 기억한다. 다만, 레지스터(14, 15)는 독출한 1워드분의 데이터를 일시 유지해 두는 판독 버퍼의 기능을 가지고, 도시하지 않은 클록 신호에 따라서 MAC(12)에 대하여 W/3씩 "b", "c"으로서 순차 공급된다.
레지스터(16)는 MAC(12)에서의 연산 결과 중 상위의 3×W분의 데이터를 출력값 d로서 다음 연산을 위해 기억하고, 다음 연산할 때는 이것을 MAC(12)에 공급한다. MAC(12)에서는 (d, e)=a×b+c+d를 계산한다.
레지스터(17)는 MAC(12)에서의 연산 결과 중 하위의 W/3의 데이터를 출력값 e로서 기억한다. 레지스터(17)는 기록 버퍼의 기능을 가지고, 1워드분의 데이터가 쌓이면, 통합하여 메모리(11)에 기록하는 동작을 한다.
이들 레지스터(13∼17)에 의해 MAC(12)의 비트폭에 따라서 MAC(12)에 있어서의 1클록 시간에서의 소비 데이터량과 생성 데이터량의 총합이 메모리(11)에 있어서의 1클록 시간에서의 전송 가능 데이터량이 되도록 다배장 데이터 중 1클록 시간에서 MAC(12)에 공급하는 데이터량이 조정된다. 즉, 상기한 예에서는 MAC(12)는 1클록으로 입력값 B의 W/3과, 입력값 C의 W/3을 소비하여, 연산 결과 중 상위의 3×W는 다음 클록의 연산에서 이용되기 때문에 하위의 W/3의 데이터량의 연산 결과를 생성한다. 이들 데이터량의 총합은 W가 되고, 메모리(11)의 1클록 시간에 전송 가능한 데이터량 이하(상기한 예에서는 전송 가능한 데이터량 W와 일치)이기 때문에 싱글포트 메모리의 데이터 전송 능력으로 충분하다.
또한, MAC(12)는 비트폭이 다른 승수와 피승수로 곱합 연산 처리를 하는 구성으로 했기 때문에 후술하는 캐리 분할이나, 중간 레지스터를 이용하여 MAC를 분할하여 파이프라인 동작시키는 구성으로 하면, 승수와 피승수의 비트폭이 동일한 구성의 MAC와 비교해서 고속 동작이 가능해진다. 또, MAC의 회로 규모는 승수와 피승수의 비트폭이 같은 것과 거의 다르지 않다.
또한, 상기와 같은 버퍼 기능을 갖는 레지스터(14, 15, 17)는 시프트 레지스터를 이용하여 용이하게 실현할 수 있다.
이하, 도 1의 다배장 데이터 곱합 연산 처리 회로(10)의 동작을 설명한다.
본 발명의 실시형태의 다배장 데이터 곱합 연산 처리 회로(10)는 종래와 같이 2중 루프를 이용한 알고리즘에 의해 연산을 한다. 즉, 외루프에서 입력값 A의 하위 비트로부터 3×W씩 MAC(12)에 입력하고, 그것에 대하여, 내루프에서 W/3씩 입력되는 입력값 B, C를 이용하여 곱합 연산을 한다.
곱합 연산 처리 동작이 시작하면, 우선, 메모리(11)에 기억된 다배장 데이터의 입력값 A를 하위로부터 3회 판독하고, A[i], A[i+1], A[i+2]를 레지스터(13)에 유지하고, 그 값을 "a"로서 MAC(12)에 입력한다. 다음에, 메모리(11)에 기억된 다배장 데이터의 입력값 B, C를 하위로부터 1워드 길이분 통합하여 독출하고, 레지스터(14, 15)에 기억한다. 그 후, 레지스터(14, 15)로부터 W/3씩, "b", "c"로서 MAC(12)에 공급한다.
MAC(12)는 1클록에서 (d, e)=a×b+c+d의 연산을 하여, 결과로서, 3×W+W/3의 데이터량의 연산 결과를 출력한다. 여기서, 상위의 3×W의 출력값 d는 레지스터(16)에 기억되고, 다음 클록에서 레지스터(14, 15)로부터 다음 W/3길이분의 데이터가 입력되어 연산이 행해질 때에 이용된다. 또한 하위의 W/3의 출력값 e는 레지스터(17)에 기억된다. 레지스터(17)에 기억되는 출력값 e는 1워드 길이분 쌓였을 때에 통합하여 메모리(11)에 기록된다. 이와 같이 하여, 레지스터(14, 15)에 기억된 1워드 길이분의 데이터가 소비되면(내루프의 한 번의 처리가 종료), 레지스터(14, 15)에는 새롭게 전회의 처리에서 입력한 데이터의 1워드 길이분 상위의 데이터를 기억하여, 상기와 같이 MAC(12)에서 연산 처리가 행해진다.
또, 싱글 포트 메모리의 경우, 1워드 길이분의 입력값 B, C의 입력은 동시에는 행할 수 없기 때문에 시간을 어긋나게 하여 레지스터(14, 15)에 기억되지만, 예컨대, 레지스터(14)의 버퍼의 비트폭을 레지스터(15)보다 길게 하여, 입력값 B의 독출을 먼저 행하게 하고, 시프트 동작에 의해 MAC(12)에는 동시에 하위의 W/3이 입력되도록 하면 MAC(12)에서의 연산을 정지시키는 일이 없다(상세한 것은 후술한다).
A[i], A[i+1], A[i+2]에 대하여 입력값 B, C의 전부에 관해서 연산이 종료하면, A[i], A[i+1], A[i+2]을 갱신하여 입력값 A의 전부에 관해서 상기한 처리를 반복한다.
상기한 바와 같이 함으로써 싱글포트 메모리의 데이터 전송 능력이라도 MAC(12)의 회로 사용 효율을 내리는 일은 없다. 즉, 1클록 시간마다 한 번의 연산을 할 수 있는 효율적인 다배장 데이터의 곱합 연산 처리가 실현 가능해진다.
다음에, 도 1에서 도시한 바와 같은 다배장 데이터 곱합 연산 처리 회로(10)를 몽고메리 곱합 잉여 연산에 적용한 경우에 관해서 설명한다.
이하에서는, 입력값 A, B, C, N을 입력하고, 몽고메리 곱합 잉여 연산을 하여, 출력값 X, Y와 출력값 Y의 정부의 부호를 싱글포트 메모리에 출력하는 경우에 관해서 설명한다.
또한, 이하에서는 설명을 위해 입력값 A, B, C, N을 256비트로 하고, 2의 누승수 R=2256, 몽고메리 곱합 잉여 연산에 필요한 파라미터인 입력값 ND을 64비트한다. 또한 T 및 M은 연산의 중간치이다. 또한, 각 값을 상위 측에서 16비트마다 이하와 같이 표현한다.
A[255:0]={a15, a14, a13, a12, a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0};
B[255:0]={b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0};
이하, C, N, T, M, X, Y도 마찬가지로 표현한다.
몽고메리 곱합 잉여 연산은 이하와 같이 된다.
T=A×B+C..................................(5)
M={t3, t2, t1, t0}×NDmod264...............(6)
X=(M×N+T)/264.............................(7)
Y=X-N.....................................(8)
0<Y의 경우는 출력값 X의 값이 연산 결과이며, 0≥Y의 경우는 출력값 Y의 값이 연산 결과이다.
또, 위의 식(6), (7)에 있어서 R=2256으로 하지 않고서 264로 한 것은 비특허문헌 2에 있는 바와 같은 처리 수법, 즉, 식(5)의 연산 처리 과정에서 연산 중간치(T)가 하위 측에서 순서대로 결정해 나갈 때에, 그 때마다 연산 중간치(T)의 최하위 워드에 대하여 식(6)의 연산 결과인 연산 중간치(M)의 최하위 워드를 연산 결정하여, 식(7)의 연산 결과인 출력값 X를 연산해 나가는 방법을 이용하기 때문이다.
도 2는 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로의 구성을 도시한 도면이다.
본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로(100)는 식(5)∼(8)에서 도시한 몽고메리 곱합 잉여 연산을 하는 회로이며, 도 1에서 도시한 바와 같은 다배장 데이터 곱합 연산 처리 회로[도 2에서는 곱합 연산부(110, 120)라 표기하고 있다]를 2개 직렬로 접속한 구성으로 되어 있다. 또, 도 2에서는 메모리의 도시를 생략하고 있다. 또한, 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로(100)는 식(8)의 연산을 하기 위한 감산부(130)를 갖고 있다.
도시하지 않은 메모리는 64비트폭의 싱글포트 단일 메모리이다. 1클록 시간에 1어드레스 영역에 대하여 판독 혹은 기록 액세스의 어느 쪽인가가 가능한 구조이다. 이 메모리는 연산에 필요한 입력값 A, B, C, N의 값을 유지하고 있다. 또한 연산 결과인 출력값 X, Y를 기억한다. 연산 중간치(T, M)를 유지하는 작업 영역으로서도 이용된다. 또, 입력값 R, ND는 용량이 작기 때문에 도시하지 않은 별도의 레지스터에 유지하고 있다.
곱합 연산부(110)는 MAC(111)과, Areg(112), Breg(113), Creg(114), Dreg(115)를 가지고, 식(5)의 연산을 한다.
MAC(111)는 입력값 A, B, C 중, 예컨대 입력값 A를 피승수, 입력값 B를 승수로 한 경우, 비트폭이 다른 승수와 피승수로 곱합 연산을 한다. 즉, 피승수의 입력값 A를 64비트폭, 승수인 입력값 B를 16비트폭으로 하여 곱합 연산 A×B+C를 행하여, 연산 결과를 출력한다.
Areg(112)는 메모리로부터 독출한 다배장 데이터의 입력값 A를 64비트분 기억하는 레지스터이다.
Breg(113)는 메모리로부터 독출한 다배장 데이터의 입력값 B를 64비트분 기억하는 레지스터이다. 또한, 도시하지 않은 클록 신호에 따라서 입력값 B의 64비트 중 하위 16비트씩 시프트시켜 MAC(111)에 공급한다. 또, Breg(113)는 더욱 32비트분의 버퍼를 갖고 있다. 이것은 입력값 B, C는 동시에 1클록 시간에는 독출할 수 없기 때문에 입력값 B의 독출을 2클록 시간만큼 전에 하여, MAC(111)에의 16비트의 데이터 공급의 타이밍을 입력값 C와 일치하게 하기 위해서이다.
Creg(114)는 메모리로부터 독출한 다배장 데이터의 입력값 C(외루프의 한 번째) 또는 출력값 X(외루프의 두 번째 이후)를 64비트분 기억하는 레지스터이다. 또한, 도시하지 않은 클록 신호에 따라서 입력값 C의 64비트 중 하위 16비트씩 시프트시켜 MAC(111)에 공급한다.
Dreg(115)는 MAC(111)의 연산 결과의 80비트의 연산 중간치(T) 중 상위의 64비트를 기억하는 레지스터이다. 또, MAC(111)는 캐리의 입출력을 4비트씩 갖기 때문에(후술한다), 그 만큼이 부가되어 Dreg(115)는 68비트의 구성으로 되어 있다.
이러한 구성에 따르면, MAC(111)에서는 1클록 시간에서 입력값 B의 16비트와, 입력값 C의 16비트를 소비하여, 연산 결과 중 상위의 64비트는 다음 클록의 연산에서 이용되기 때문에 하위의 16비트의 데이터량의 연산 결과를 생성한다. 이들 데이터량의 총합은 48비트가 되고, 메모리의 1클록 시간에 전송 가능한 데이터량 64비트 이하이기 때문에 싱글포트 메모리의 데이터 전송 능력으로 조달할 수 있다.
곱합 연산부(120)는 MAC(121)과, Freg(122), Greg(123), Ereg(124), Hreg(125)를 갖는다.
MAC(121)는 {t3, t2, t1, t0}×ND의 연산 결과 중 하위의 64비트만을 연산함으로써(264의 잉여를 연산하는 것에 해당), 식(6)을 연산하고, 식(7)의 M×N+T를 행하여, 연산 결과를 출력한다.
Freg(122)는 식(6)을 연산할 때는 도시하지 않은 레지스터에 기억된 입력값 ND을, 식(7)을 연산할 때는 후술하는 Ireg(133)에 기억된 연산 중간치(M)를 기억하는 레지스터이다.
Greg(123)는 메모리로부터 독출한 다배장 데이터의 입력값 N을 64비트분 기억한다. 또한, 1클록 시간에서 입력값 N의 64비트 중 하위 16비트씩 시프트하여 MAC(121)에 공급한다. 또, Greg(123)는 식(6)의 연산 중간치(M)를 산출하는 때는 연산 중간치(T)의 하위 16비트를 판독하여 MAC(121)에 공급한다.
Ereg(124)는 식(5)에 의한 연산 중간치(T)의 하위 16비트를 기억하여, MAC(121)에 공급한다. 또, 식(6)을 연산할 때는 연산 중간치(T)의 64비트{t3, t2, t1, t0}는 Greg(123)에 기억되기 때문에 Ereg(124)의 값은 0이 된다.
Hreg(125)는 MAC(121)의 연산 결과의 80비트 중 상위의 64비트를 기억하는 레지스터이다. 또, MAC(121)는 캐리의 입출력을 4비트씩 가지고(후술한다), 그 만큼이 부가되기 때문에 Hreg(125)는 68비트의 구성으로 되어 있다.
이러한 구성에 따르면, MAC(121)에서는 식(6)의 연산에서는 1클록 시간에서 연산 중간치(T)의 16비트를 소비하여, 연산 결과 중 상위의 64비트는 다음 클록의 연산에서 이용되기 때문에 하위의 16비트의 데이터량의 연산 결과를 생성한다. 이들 데이터량의 총합은 32비트가 된다. 또한, 식(7)을 연산할 때는 1클록 시간에서 입력값 N의 16비트와 연산 중간치(T)의 16비트를 소비하여, 16비트의 데이터량의 연산 결과를 생성한다. 이들 데이터량의 총합은 48비트가 된다. 싱글포트 메모리의 1클록 시간에 전송 가능한 데이터량은 64비트 이하이기 때문에 싱글포트 메모리의 데이터 전송 능력으로 조달할 수 있다.
감산부(130)는 16비트 감산기(131)와, Jreg(132), Ireg(133), Kreg(134)와, 캐리를 유지하는 캐리 레지스터(135, 136)를 갖는다.
16비트 감산기(131)는 식(8)의 연산을 하여 연산 결과를 출력한다.
Jreg(132)는 메모리로부터 독출한 다배장 데이터의 입력값 N을 64비트분 기억한다. 또한, 1클록 시간에서 입력값 N의 64비트 중 하위 16비트씩 시프트하여 16비트 감산기(131)에 공급한다.
Ireg(133)는 곱합 연산부(120)로부터 16비트씩 출력되는 식(6)에 의한 연산 중간치(M) 또는 식(7)의 M×N+T의 값을 기억한다. 64비트분의 연산 중간치(M)는 곱합 연산부(120)에서 식(6)의 연산에 이용되기 때문에, Freg(122)에 공급된다. 또한 식(7)의 연산 결과인 출력값 X는 M×N+T를 264로 나눔으로써 얻어지지만, 메모리에 기록할 때에 최초의 4클록 시간분 64비트분을 기록하지 않고 버림으로써 얻어진다(상세한 것은 후술한다).
Kreg(134)는 16비트 감산기(131)에 의한 식(8)의 출력값 Y를 16비트씩 기억하여, 64비트분 쌓였을 때에 통합하여 메모리에 기록한다.
이하, 도 2의 몽고메리 곱합 잉여 연산 회로(100)의 동작을 설명하기 전에, MAC(111, 121)의 구성 및, 메모리의 관리 구성 및 제어 커맨드 레지스터의 예를 설명한다.
도 3은 본 발명의 실시형태에 있어서의 MAC의 구성을 도시한 도면이다.
도면과 같이 MAC(111)는 비트폭 80비트=64비트×16비트+16비트+64비트의 구성이다. 도 2에서 설명한 입력값 A를 기억하는 Areg(112)로부터 입력되는 64비트의 값을 AIN[63:0], 입력값 B를 기억하는 Breg(113)로부터 입력되는 16비트의 값을 BIN[15:0], 입력값 C를 기억하는 Creg(114)로부터 입력되는 16비트의 값을 CIN[15:0], MAC(111)의 연산 결과의 80비트 중 상위의 64비트를 기억하는 Dreg(115)로부터 입력되는 64비트의 값을 DIN[63:0]이라 표기하고 있다. 또한, MAC(111)으로부터 출력되는 80비트의 값을 XOUT[79:0], Dreg(115)에 일단 기억시키기 위한 4비트의 캐리의 출력값을 YOUT[3:0], 4비트의 캐리를 기억한 Dreg(115)로부터 입력되는 캐리를 YIN[3:0]이라 표기하고 있다.
MAC(111)는 부분곱 생성부(201)와, 복수항 가산기부(202)와, 복수의 16비트의 자릿수 올림 가산기(203, 204, 205, 206, 207)를 갖는다.
부분곱 생성부(201)는 AIN과 BIN의 부분곱 AB00[63:0]∼AB15[63:0]을 생성한다. 또, 도시를 생략했지만 16비트×16비트의 부분곱의 생성을 하는 회로가 4개 병렬로 배치된 AND-ARRAY 구조로 되어 있다.
복수항 가산기부(202)는 부분곱 AB00[63:0]∼AB15[63:0]과 CIN, DIN을 가산한다.
자릿수 올림 가산기(203, 204, 205, 206, 207)는 1클록 시간에서 하위 16비트의 값만 확정치가 출력하면 되기 때문에 16비트씩 5개로 분할하여 가산을 실시하는 구성으로 되어 있다(5개로 캐리 분할하고 있다). 이 때문에, YIN[3:0], YOUT[3:0]의 캐리 입출력이 존재한다.
캐리 출력의 YOUT[3:0]는 일단 Dreg(115)에 유지해 두고, 다음 번의 곱합 연산의 캐리 입력의 YIN[3:0]으로서 사용할 수 있다. 이 구성은 자릿수 올림 처리의 지연 패스를 짧게할 수 있기 때문에 출력 지연 시간을 작게 할 수 있고, 동작 클록 주파수를 올리는 것이 가능해진다.
MAC(111)의 AIN과 BIN의 비트수에 대하여 이 캐리 분할의 폭은 비트폭이 적은 쪽에 맞추는 것이 가능하다.
종래와 같은 (W)×(W)+(W)+(W)(W는 워드 길이)의 비트폭 구성의 MAC의 캐리 분할폭은 W로 할 수 있다. 한편, 본 발명의 실시형태와 같이 64비트×16비트+16비트+64비트, 1 W를 32비트라고 하면(2W)×(W/2)+(W/2)+(2W)의 비트폭 구성의 MAC(111)의 캐리 분할폭은 (W/2)로 할 수 있다. 이 2개의 MAC의 한번의 연산량은 동일하다고 볼 수 있지만, 출력 지연 시간은 후자 쪽을 빨리 할 수 있다. 다만, 캐리 분할을 하고 있는 경우에는 연산 마지막에 자릿수 올림의 처리 시간이 필요하게 된다. 그러나 다배장 데이터의 곱합 연산을 하는 경우로서, 워드 길이와 데이터 길이의 비가 충분히 큰 경우에는 동작 클록 주파수를 올릴 수 있는 후자의 구성 쪽이 전체의 처리 시간을 짧게 할 수 있다.
또, MAC(121)는 MAC(111)과 같은 구성이기 때문에 설명을 생략한다. 다음에, 본 발명의 실시형태에 있어서의 메모리의 관리 구성에 관해서 설명한다.
본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로(100)에서는 메모리를 단일의 구성으로 하고 있기 때문에 필요한 데이터를 복수 개 기억한다. 각각의 데이터는 기억되어 있는 영역의 선두 어드레스와 데이터 길이를 알면 특정할 수 있고, 연산을 실행할 때는 입력값 A, B, C, N, 출력값 X, Y의 입출력 영역으로서 메모리 상의 영역을 임의로 할당할 수 있게 된다.
그러나, 식(8)의 최후의 비교 감산의 판정 결과에 의해 출력값 X, Y의 어느 쪽이 최종 결과가 되기 때문에 몽고메리 곱합 잉여 연산 회로(100)에 입력하는 데이터, 연산 결과를 지정하는 도시하지 않은 제어부[예컨대 CPU(Central Processing Unit) 등의 처리 프로세서]로부터의 메모리 관리가 번잡해진다.
도 4는 본 발명의 실시형태에 있어서의 메모리 관리의 구성을 도시한 도면이다.
메모리를 관리하는 기구로서 도시하지 않은 제어부와는 별도로, 몽고메리 곱합 잉여 연산 회로(100)측에 복수의 포인터 기억 레지스터를 준비해 둔다. 포인터 기억 레지스터에는 대응하는 메모리 영역의 선두 어드레스가 중복 없이 기억되도록 해 둔다. Amem, Bmem, …, Nmem은 도시하지 않은 제어부가 지정하는 데이터 영역명이며, 포인터 기억 레지스터의 하나하나와 대응하고 있다. 즉 도시하지 않은 제어부로부터 보아 포인터 기억 레지스터는 하나의 데이터 영역을 도시하게 된다. 예컨대, 도시하지 않은 제어부가 데이터 영역명 Amem을 지정한 경우에는 메모리 실(實)어드레스의 선두 어드레스 "O11O"를 기억하고 있는 포인터 기억 레지스터라는 데이터 영역을 지정하게 된다.
도 5는 제어 커맨드 레지스터의 일례를 도시한 도면이다.
도면과 같은 제어 커맨드 레지스터는 도시하지 않은 제어부에서 보이는 커맨드 레지스터이며, 도 4에서 설명한 바와 같이 데이터 영역으로서 Amem∼Nmem이 존재하고 있기 때문에 4비트의 수치를 각각의 영역명의 인수(argument: 도면에서는 생략하여 arg라 표기하고 있다)로서 지정할 수 있다. 32비트의 커맨드 레지스터로 한 경우, 예컨대, 도 5와 같이 bit[3:0]는 R/W(독출 또는 기록)의 연산 결과 출력 영역을 지정하기 위한 영역을 도시하고, 연산 결과인 출력값 Y가 지정된다. 또한, bit[7:4]는 R/W의 작업 영역을 지정하기 위한 영역을 도시하고, 연산 결과인 출력값 X가 지정된다(또, X와 Y가 반대라도 상관없다). 여기서, 작업 영역이란 메모리의 내용이 파괴되는 영역에서 연산후의 값의 보장이 되지 않는 영역이다.
bit[11:8]는 R/W의 입력값 C의 입력 영역을 지정하는 영역을 도시한다. 마찬가지로 bit[15:12]는 입력값 B, bit[19:16]는 입력값 A, bit[23:20]는 입력값 N의 입력 영역을 지정하는 영역을 도시한다. 또한, bit[31]는 R/W의 연산을 실행/정지 제어의 지정을 하는 영역이다.
이러한 메모리 관리 방식에서는 몽고메리 곱합 잉여 연산 회로(100)는 도시하지 않은 제어부에서 메모리 상에서의 입출력처로서 지정된 데이터 영역명으로부터 포인터 기억 레지스터를 일단 참조한 뒤에, 실데이터를 입출력하는 실메모리 영역을 결정하여, 식(5)∼(8)에서 도시한 바와 같은 몽고메리 곱합 잉여 연산 처리를 한다. 또한, 지정된 데이터 영역에 연산 결과인 출력값 X, Y의 출력을 하지만, 그 후, 식(8)의 비교 감산 결과에 따라서, Y<0이면 포인터 기억 레지스터의 내용(선두 어드레스)만을 교체하는 처리를 실행한다.
이러한 구성이면 미리 외부의 도시하지 않은 제어부에 의해 데이터 영역명에서, 작업 영역, 출력 결과 기억 영역을 임의로 지정되어 있는 경우라도 데이터 영역명을 바꾸지 않고서 상기한 교체 처리를 함으로써 영역명과 기억되어 있는 데이터의 정합성이 실현된다. 이에 따라, 제어부에서의 메모리 관리가 용이해진다.
또한, 몽고메리 곱합 잉여 연산에서는 수치로서 정수 0, 정수 1과 메모리 상의 값을 연산하는 경우가 있다. 예컨대, T= A×1+0으로서 연산하는 경우이다. 이러한 때에 메모리 상에 실제로 정수 0과 정수 1을 둘 필요는 없고, 도 6에 도시한 바와 같이 커맨드 레지스터 중, 메모리 영역이 실존하지 않는 것을 정수값으로서 할당하는 것으로 몽고메리 곱합 잉여 연산 회로(100)에 정수값을 입력할 수 있다.
상기와 같은 메모리 관리 구성/제어 방법을 구성함으로써 도시하지 않은 제어부로부터의 몽고메리 곱합 잉여 연산 회로(100)에 대한 제어를 용이하게 할 수 있다.
이러한 메모리 관리 구성/제어 방법은 도시하지 않은 제어부에서 대체 실시하는 것도 가능하지만, 제어부가 내장형 프로세서로서 처리 능력이 부족한 경우라도 몽고메리 곱합 잉여 연산 회로(100) 측에 포인터 기억 레지스터를 설치하여 실시함으로써 메모리 내부에 매우 많은 데이터가 존재하는 경우에도 연산 처리를 고속으로 실시할 수 있다.
다음에, 타이밍 차트를 이용하여 도 2의 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로(100)의 동작을 설명한다.
도 6은 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로의 동작을 도시하는 타이밍 차트의 전반의 단계이다.
또한 도 7은 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로의 동작을 도시하는 타이밍 차트의 후반의 단계이다.
이 타이밍 차트상에서는 위에서 클록 사이클, 도시하지 않은 제어부로부터의 메모리에의 액세스가 판독인지 기록인지를 도시하는 "Memory Access", 메모리로부터 독출하는 데이터를 지정하기 위한 "Memory Read Data", 메모리에 기록하는 데이터를 지정하기 위한 "Memory Write Data"가 표시되고 있다. 또한, 도 2에서 도시한 몽고메리 곱합 잉여 연산 회로(100)의 각 레지스터의 값이 표시된다. 즉, Areg(112)의 64비트의 값, Breg(113)의 하위 16비트, Creg(114)의 하위 16비트, Dreg(115)의 64비트, Ereg(124)의 16비트, Freg(122)의 64비트, Greg(123)의 하위 16비트, Hreg(125)의 64비트, Ireg(133)의 상위 16비트, Jreg(132)의 하위 16비트, Kreg(134)의 상위 16비트이다.
또한, 타이밍 차트 중에서 "-"는 연산도중의 중간치를 나타내고, 사선은 부정치를 나타내고, ×표시(Ireg(133)의 값)는 처리 불필요한 출력값을 나타낸다. "don't care"는 0이어도 1이어도 되는 것을 나타낸다.
처음의 단계(입력값 A{a3, a2, a1, a0}를 이용한 연산)에 있어서 시각 t1까지는 식(6)의 연산 중간치(M)를 산출하는 처리를 한다. 클록 사이클 1∼3에 있어서 도시하지 않은 제어부에서 메모리에의 판독 액세스가 이루어진다. 이에 따라, 입력값 B, A, C의 순으로 64비트의 데이터가 메모리로부터 판독된다. 그리고, Areg(112)에는 A{a3, a2, a1, a0}가 기억되고, Breg(113)에는 B{b3, b2, b1, b0}가 기억되고, Creg(114)에는 C{c3, c2, c1, c0}이 기억된다. 이들 값에 의해 MAC(111)는 곱합 연산 처리를 하지만, 전술한 바와 같이 본 발명의 실시형태에서는 입력값 A는 64비트, 입력값 B, C는 하위의 16비트씩 행하기 때문에 시작의 1클록의 연산은 A{a3, a2, a1, a0}×b0+c0이 된다. 이 식에 의해서 산출되는 연산 중간치(T)의 하위 16비트의 t0은 Greg(123)에 기억된다. Greg(123)에 기억된 t0은 MAC(121)에 공급되고, t0과, Freg(122)에 기억된 64비트의 입력값 ND에 의해 식(6)의 연산을 하여, 그 결과 중 하위 16비트를 연산 중간치(M)의 하위 16비트의 m0으로서 Ireg(133)의 상위 16비트에 기억한다. 이상의 처리를 b1∼b3, c1∼c3에 관해서도 반복, Ireg(133)에서는 클록마다 m0, m1, m2, m3이라 시프트시켜, 연산 중간치(M){m3, m2, m1, m0}을 얻는다.
시각 t1로부터는 출력값 X를 산출하는 처리를 한다. 클록 사이클 5에 있어서 64비트분의 입력값 B{b3, b2, b1, b0}를 판독하기 위한 판독 액세스를 행하고, 그 후 1 클록 사이클 비워 64비트의 입력값 C{c3, c2, c1, c0}을 판독하기 위한 판독 액세스를 행한다. 전술한 바와 같이 Breg(113)는 32비트분 쓸데없이 버퍼를 갖고 있기 때문에 클록에 따라서 Breg(113)와 Creg(114)의 하위 16비트씩 동시에 MAC(111)에 공급되고, 연산 중간치(M)를 산출할 때에 입력한 64비트의 입력값 A와, 이들의 값에 의해 식(5)의 연산에 의해 연산 중간치(T)를 얻을 수 있다. 연산 중간치(T)는 t0, t1, t2, t3의 순으로 Ereg(124)에 기억되어, MAC(121)에 공급된다. MAC(121)에는 더욱 Freg(122)에 기억된 연산 중간치(M)의 64비트와, 클록 사이클 8의 판독 액세스로 메모리로부터 Greg(123)에 기억된 입력값 N의 하위 16비트씩(n0, n1, n2, n3)이 공급되어, 식(7)의 연산을 하여 Ireg(133)의 상위 16비트에 출력한다. 그러나, 여기서 얻어진 출력값 X의 64비트는 전술한 바와 같이 식(7)의 264로 뺄셈함으로써 메모리에 기록하지 않고서 버린다(도 6에서 × 표시).
클록 사이클 9에서는 다시 입력값 B{b7, b6, b5, b4}의 판독 액세스가 행해지고, 마찬가지로 입력값 C, N이 판독되어, 식(5), (7)의 연산을 하여 연산 결과인 출력값 X가 Ireg(133)에 16비트씩 기억된다. Ireg(133)에 64비트의 출력값 X{x3, x2, x1, x0}가 쌓이면 클록 사이클 18의 기록 액세스에 의해서 출력값 X{x3, x2, x1, x0}가 메모리에 기록된다.
마찬가지로 하여, 출력값 X{x7, x6, x5, x4}, 출력값 X{x11, x10, x9, x8}, 출력값 X{x15, x14, x13, x12}가 산출되어 메모리에 기록된다. 다만, 최후의 출력값 X{x15, x14, x13, x12}일 때는 식(5)에서 이용하는 입력값 B, C는 0이며, 식(7)에서 이용하는 연산 중간치(M)는 "don't care", 입력값 N은 0이 된다.
이상에서 처음의 단계(입력값 A{a3, a2, a1, a0}를 이용한 연산)가 끝나고 시각 t2로부터 다음 단계(입력값 A{a7, a6, a5, a4}를 이용한 연산)가 마찬가지로 행해진다. 다만, 입력값 C의 대신에 전단계에서 산출되어 메모리에 기록된 출력값 X를 이용하여 연산을 한다.
이하 마찬가지로 하여, 입력값 A{a11, a10, a9, a8}를 이용한 연산이 행해지고, 최후의 단계인 A{a15, a14, a13, a12}를 이용한 연산으로 이동한다(도 7).
최후의 단계에서는 16비트 감산기(131)를 이용하여 식(8)의 연산을 하여, 연산 결과인 출력값 Y를 산출한다. 그 때문에, 출력값 X가 16비트씩 산출되는 것과 동시에, Jreg(132)에 클록 사이클 87의 판독 액세스로 판독된 입력값 N{n3, n2, n1, n0}의 하위의 16비트씩 16비트 감산기(131)에 공급되고, 출력값 Y가 16비트씩 산출되어 Kreg(134)에 기억된다. 출력값 Y{y3, y2, y1, y0}는 64비트 쌓였을 때에 클록 사이클 94의 기록 액세스에 의해서 통합하여 메모리에 기록된다. 이 출력값 Y의 메모리에의 기록 시간을 염출하기 위해서 곱합 연산의 파이프라인 처리를 중단하고 있다. 이하 마찬가지로 하여, 연산 결과인 출력값 Y{y7, y6, y5, y4}, Y{y11, y10, y9, y8}, Y{y15, y14, y13, y12}를 산출하여 메모리에 기록한다.
이상 설명한 바와 같이, 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로(100)에 의하면 4클록 시간에 64비트의 리드 액세스가 3회, 라이트 액세스가 한 번의 비율로 발생하게 되고, 64비트폭의 싱글 포트 메모리를 이용한 경우라도 MAC(111, 121)를 클록마다 사용할 수 있고, 효율적으로 몽고메리 곱합 잉여 연산 처리를 실행하는 것이 가능해진다.
상기에서는 MAC을 2개 이용한 경우에 관해서 설명했지만, 하나만 이용하여, 식(5)∼(7)의 연산을 시분할로 실시하는 것도 가능하고, 이 경우라도 MAC의 사용 효율은 그다지 변하지 않는다. 또한, MAC을 3개의 직렬 구조로 하여, 식(5)∼(7)의 연산을 별개로 실시하는 것도 가능하다. 이 경우 M=T×ND의 연산을 위한 MAC의 사용 효율이 떨어지지만, 전체의 파이프라인 처리가 흐트러지지 않기 때문에 고속인 연산 처리가 가능해진다.
또한, 몽고메리 곱합 잉여 연산 회로(100)의 입력값 A, B, N은 복수의 워드 데이터로 분할되어 있기 때문에 각각의 워드 데이터의 연산 처리를 하기 위해서 곱합 연산부를 4개 이상 직렬로 접속하여 이용하여 분할 처리하면 고속 연산이 가능해진다.
도 8은 MAC을 하나 이용한 몽고메리 곱합 잉여 연산 회로의 구성도이다.
이 도면에서는 식(8)을 행하는 감산부에 관해서는 도 2에서 도시한 회로와 마찬가지기 때문에 도시 및 설명을 생략한다. 또한 메모리도 도시를 생략했지만, 64비트폭의 싱글포트 메모리이다.
도 8에서 도시하는 몽고메리 곱합 잉여 연산 회로(300)는 MAC(301)와, 메모리로부터 64비트의 입력값 A, ND, 연산 중간치(M)를 입력하여 1비트 확장하고, 65비트의 데이터로서 MAC(301)에 공급하는 Areg(302)와, 메모리로부터 64비트의 입력값 A, B, N을 입력하여 하위의 16비트씩 MAC(301)에 공급하는 64+32비트의 비트폭을 갖는 Breg(303)와, 메모리로부터 64비트의 입력값 C, 연산 중간치(T), 출력값 X를 입력하여 하위의 16비트씩 MAC(301)에 공급하는 Creg(304)를 갖는다. 또한, MAC(301)의 연산 결과 중 상위 65비트를 유지하여 MAC(301)에 다시 공급하는 Dreg(305)와, 연산 결과 중 하위 16비트를 유지하여 64비트분 쌓였을 때에 메모리에는 연산 중간치(T)와 출력값 X, Areg(302)에는 연산 중간치(M)를 출력하는 Ereg(306)를 갖는다.
도 8에서 도시하는 MAC(301)가 하나의 몽고메리 곱합 잉여 연산 회로(300)는 식(5)∼(7)의 연산을 시분할하여 처리한다.
또한 이하의 이유에 의해 MAC(301)의 비트수를 81비트=65×16+16+65로 하고 있다.
몽고메리 곱합 잉여 연산에 의한 누승치 연산을 바이너리법으로 행한 경우, 2승치(T=A×A)를 연산하는 비율이 높다. 이 때문에 T=A×A의 2승 연산을 고속으로 실현해야 한다.
2승산은 연산 루프 중에서, i>j의 경우는 처리를 스킵하고, i=j의 경우는 T=T+A[i]×A[j], i<j의 경우는 T=T+2×A[i]×A[j]로 함으로써 연산에 필요한 사이클수의 약 절반으로 억제할 수 있게 된다.
T=T+2×A[i]의 연산을 실시할 때에 A[i]×A[j]의 값을 좌측 시프트하는 구성으로 하는 MAC(301)의 내부의 구조가 복잡해지고, 지연 패스가 길어진다. 도 8에서는 Areg(302)을 1비트 확장하고, i<j의 경우는 Areg(302)의 입력값 A[i]값을 좌측 시프트하여, 2×A[i]와 A[j]의 곱을 연산하는 구성으로 함으로써 MAC(301)의 구조의 단순화와 고속화를 행하고 있다.
이상의 설명에서는 메모리를 싱글포트 메모리로서 설명했지만, 멀티포트 메모리를 이용하더라도 좋다. 본 발명에 있어서의 MAC는 승수와 피승수의 비트폭을 다른 것으로 했기 때문에 전술한 캐리 분할 이외에 이하에 도시한 바와 같은 MAC의 고속 동작이 가능한 구성이 얻어진다. 또한, 그와 같이 구성한 MAC와 멀티포트 메모리를 조합하는 것에 의해 몽고메리 곱합 연산 처리를 더욱 고속으로 행할 수 있다.
도 9는 MAC을 3가지 이용한 몽고메리 곱합 잉여 연산 회로의 구성도이다.
이 회로 구성에서는 식(5)∼(7)의 연산을 각각의 MAC에서 연산 처리를 하는 구성이다.
식(8)을 행하는 감산부에 관해서는 도 2에서 도시한 회로와 마찬가지이기 때문에 도시 및 설명을 생략한다. 또한, 메모리도 도시를 생략하고 있지만, 512비트폭의 3포트 메모리를 사용하고 있다.
도면과 같이 몽고메리 곱합 잉여 연산 회로(400)는 식(5)의 연산을 하는 MAC(411)와, MAC(411)에 입력값 A, B, C 또는 출력값 X를 공급하는 Areg(412), Breg(413), Creg(414)와, MAC(411)에서의 연산 결과 중 상위의 512비트를 기억하여 MAC(411)에 공급하는 Dreg(415)를 갖는다. 또한, 식(6)의 연산을 하는 MAC(421)를 갖고 있다. 또한, MAC(421)에 512비트의 입력값 ND를 공급하는 Hreg(422)와, MAC(411)에서의 연산 결과의 하위 32비트인 연산 중간치(T)를 기억하여 MAC(421)에 공급하는 Ereg(423)와, MAC(421)의 연산 결과 중 상위의 480비트를 기억하여 다시 MAC(421)에 공급하는 Mreg(424)를 갖는다.
식(7)의 연산을 하는 부분은 MAC(431)과, 512비트의 입력값 N을 공급하는 Nreg(432)와, MAC(412)에서의 연산 결과 중 하위 32비트인 연산 중간치(M) 또는 512비트의 입력값 N을 32비트씩 MAC(431)에 공급하는 Preg(433)를 갖는다. 또한, MAC(411)에서의 연산 결과의 연산 중간치(T)의 하위 32비트 또는 상위 480비트를 선택하는 멀티플렉서(mux)(434)와, 선택된 값을 유지하여 MAC(431)에 공급하는 Rreg(435)와, MAC(431)에서의 연산 결과의 하위 32비트를 유지하여 512비트분 쌓였을 때에 통합하여 출력값 X로서 메모리에 기록하는 Xreg(436)와, MAC(431)의 상위 512비트를 기억하여 MAC(431) 또는 메모리에 기록하는 Vreg(437)를 갖는다.
도 10은 중간 레지스터를 이용하여 복수항 가산기 부분을 분할한 MAC의 구성을 도시한 도면이다.
MAC(411)는 32비트×32비트의 부분곱 생성 회로(501-1,…, 501-15, 501-16)가 16개 병렬 구조로 된 부분곱 생성부(501)와, 복수항 가산기부(502)와, 중간 레지스터(503)와, 4항 가산기부(504)와, 544비트의 자릿수 올림 흡수 가산기(505)에 의해 구성되어 있다.
부분곱 생성부(501)에는 Areg(412)로부터의 512비트가 32비트씩 분할되어 입력되고, Breg(413)로부터는 512비트 중 하위 32비트씩이 전술한 시프트 동작에 의해 공급되고, 부분곱 생성 회로(501-1,…, 501-15, 501-16)에서 부분곱을 생성한다.
산출한 부분곱은 복수항 가산기부(502)에서 가산되고, 중간 레지스터(503)를 통해 4항 가산기부(504)에 입력된다. 4항 가산기부(504)에는 Dreg(415)로부터의 512비트와, Creg(414)로부터의 32비트가 입력되어, A×B의 값에 가산된다.
마지막으로 544비트의 자릿수 올림 흡수 가산기(505)에서 캐리가 합쳐지고, 상위의 512비트가 Dreg(415)에, 하위의 32비트가 Ereg(416)에 기억된다.
이와 같이 복수항 가산기부(502)와, 4항 가산기부(504)와의 사이가 중간 레지스터(503)에 의해 분할하고, 파이프라인 동작시키는 구성에 있어서는 전단 측의 복수항 가산기부(502)의 지연 시간과, 후단측의 544비트의 자릿수 올림 흡수 가산기(505)의 지연 시간을 같게 함으로써 MAC(411)의 고속화가 가능해진다.
여기서, 전단 측의 지연 시간은 승수(가산 항수)의 크기로 결정되고, 후단 측의 지연 시간은 MAC(411)의 출력 비트폭으로 결정된다. 승수와 피승수의 비트폭의 비가 동일한 구성의 MAC를 상기한 바와 같이 중간 레지스터(503)로 분할하면, 중간 레지스터(503)의 전단 측의 복수항 가산 부분의 지연 시간이 후단 측의 자릿수 올림 흡수 가산의 지연 시간에 비교해서 지나치게 커진다. 그러나, 본 발명의 실시형태와 같이 MAC(411)의 승수와 피승수의 비트폭의 비를 변경함으로써 중간 레지스터(503)의 전단측의 지연 시간과 후단측의 지연 시간을 같게 할 수 있어, 전체로서의 고속 동작이 가능해진다.
또, 중단의 MAC(421)도 거의 같은 구성이며, 최후단의 MAC(431)는 513비트의 가산기의 기능을 겸비하고 있는 이외는 거의 같은 구성이기 때문에 설명을 생략한다.
이하 도 9의 회로에서 각 입력값이 512비트 이하인 몽고메리 곱합 잉여 연산을 하는 경우에 관해서 간단히 설명한다.
최전단의 MAC(411)에서 입력값 A, B, C 혹은 출력값 X의 하위 32비트로부터 연산 중간치(T)의 하위 32비트의 연산을 한다. 중단의 MAC(421)는 전단의 연산 중간치(T)의 하위 32비트와 입력치 ND에서 연산 중간치(M)의 하위 32비트를 연산한다. 최후단의 MAC(431)는 중단의 MAC(421)의 출력인 연산 중간치(M)의 하위 32비트와, 최전단의 MAC(411)의 출력인 연산 중간치(T)의 하위 32비트와, 입력값 N에서 출력값 X의 하위 32비트를 연산한다. 이상의 3가지의 처리를 각 MAC(411, 421, 431)에서 16회 반복하면, 연산 중간치(T)의 상위 512비트가 Dreg(415)에 유지되고, 출력값 X의 상위 512비트가 Vreg(437)에 유지되며, 출력값 X의 하위 512비트가 Xreg(436)에 유지된다. 다음 사이클에서 최후단의 MAC(431)에서 mux(434)로 선택된 연산 중간치(T)의 상위 비트와 출력값 X의 상위 비트를 가산 처리하여, 결과를 Vreg(437)에 유지한다. 출력값 X의 상위 비트의 값[Vreg(437)에 기억]이 최종 결과이기 때문에 이것을 메모리에 기록한다.
다음에 연산 데이터길이가 512비트보다 큰 경우에 관해서 설명한다.
입력값 A의 최하위 512비트를 사용하여 512비트 이하에 도시한 순서로 16회 연산을 한다. 그 동안은 요구한 연산 중간치(M)를 전부 Preg(433)에 유지해 둔다. 그 후, 연산 중간치(M)의 512비트를 Nreg(432)에 전송하여, 입력값 N을 메모리로부터 Preg(433)에 취득하고, 최후단의 MAC(431)에서는 연산 중간치(M)의 512비트와, 입력값 N의 하위 32비트, 연산 중간치(T)의 하위 32비트로부터 출력값 X의 연산을 계속한다(도면에서의 Swap). 이상의 처리를 입력값 A를 변경하여 반복함으로써 512비트보다 큰 값에서의 몽고메리 곱합 잉여 연산이 가능해진다.
또, 상기에서는 기수 R을 2의 누승수, 정수 N을 홀수값으로서 설명을 했지만, 이것에 한정되지 않고, 정수 N과 기수 R의 관계가 서로 소로써 기수 R가 정수N보다 크면 좋다.
본 발명의 다배장 데이터 곱합 연산 처리 회로에 따르면 승수와 피승수의 비트폭이 다른 곱합 연산 처리를 하는 MAC를 이용하고, 또한, 복수의 레지스터에 의해서 그 비트폭에 따라서 MAC에서의 1클록 시간에서의 소비 데이터량과 생성 데이터량의 총합이 메모리에 있어서의 1클록 시간에서의 전송 가능 데이터량이 되도록 다배장 데이터 중 1클록 시간에서 MAC에 공급하는 데이터량을 조정했기 때문에 싱글 포트 메모리의 데이터 전송 능력이라도 MAC의 회로 사용 효율을 내리는 일은 없고, 효율적인 곱합 연산을 할 수 있다. 또한, 싱글포트 메모리를 이용할 수 있기 때문에 회로 규모를 삭감할 수 있다.
본 발명은 예컨대 공개 열쇠 암호 방식의 하나인 RSA 방식에 있어서의 곱셈 잉여 연산을 하는 암호화 회로 또는 복호화 회로가 탑재된 ID 카드 등에 적용된다.
도 1은 본 발명의 실시형태의 다배장 데이터(多倍長: multiple-word) 곱합 연산 처리 회로의 원리도이다.
도 2는 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로의 구성을 도시한 도면이다.
도 3은 본 발명의 실시형태에 있어서의 MAC의 구성을 도시한 도면이다.
도 4는 본 발명의 실시형태에 있어서의 메모리 관리의 구성을 도시한 도면이다.
도 5는 제어 커맨드 레지스터의 일례를 도시한 도면이다.
도 6은 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로의 동작을 도시하는 타이밍 차트의 전반의 단계이다.
도 7은 본 발명의 실시형태의 몽고메리 곱합 잉여 연산 회로의 동작을 도시하는 타이밍 차트의 후반의 단계이다.
도 8은 MAC를 하나 이용한 몽고메리 곱합 잉여 연산 회로의 구성도이다.
도 9는 MAC를 3가지 이용한 몽고메리 곱합 잉여 연산 회로의 구성도이다.
도 10은 중간 레지스터를 이용하여 복수항 가산기 부분을 분할한 MAC의 구성을 도시한 도면이다.
도 11은 종래의 다배장 데이터 곱합 연산 처리 회로의 일례의 구성도이다.
<도면의 주요부분에 대한 부호의 설명>
10: 다배장 데이터 곱합 연산 처리 회로
11: 메모리
12: MAC
14, 15, 16, 17: 레지스터

Claims (7)

  1. 다배장 데이터(多倍長: multiple-word)에 대하여 곱합 연산 처리를 하는 다배장 데이터 곱합 연산 처리 회로에 있어서,
    상기 다배장 데이터를 기억하는 메모리와,
    비트폭이 다른 승수와 피승수로 상기 곱합 연산 처리를 하는 곱합 연산기와,
    상기 비트폭에 따라서 상기 곱합 연산기에 있어서의 1클록 시간에서의 소비 데이터량과 생성 데이터량의 총합이 상기 메모리에 있어서의 상기 1클록 시간에서의 전송 가능 데이터량이 되도록 상기 다배장 데이터 중 상기 1클록 시간에서 상기 곱합 연산기에 공급하는 데이터량을 조정하는 복수의 레지스터를 갖는 것을 특징으로 하는 다배장 데이터 곱합 연산 처리 회로.
  2. 제1항에 있어서, 상기 메모리는 싱글포트 메모리인 것을 특징으로 하는 다배장 데이터 곱합 연산 처리 회로.
  3. 제1항에 있어서, 상기 곱합 연산기에 있어서의 자릿수 올림 가산기를 복수로 분할한 것을 특징으로 하는 다배장 데이터 곱합 연산 처리 회로.
  4. 메모리에 기억된 다배장 데이터를 입력하여 몽고메리 곱합 잉여 연산을 하는 몽고메리 곱합 잉여 연산 회로에 있어서,
    비트폭이 다른 승수와 피승수로 곱합 연산 처리를 하는 곱합 연산기와, 상기 비트폭에 따라서 상기 곱합 연산기에 있어서의 1클록 시간에서의 소비 데이터량과 생성 데이터량의 총합이 상기 메모리에 있어서의 상기 1클록 시간에서의 전송 가능 데이터량이 되도록 상기 다배장 데이터 중 상기 1클록 시간에서 상기 곱합 연산기에 공급하는 데이터량을 조정한 복수의 레지스터로 이루어지는 곱합 연산 처리부를 하나, 또는 직렬로 접속한 복수 개를 갖는 것을 특징으로 하는 몽고메리 곱합 잉여 연산 회로.
  5. 제4항에 있어서, 상기 메모리는 싱글포트 메모리인 것을 특징으로 하는 몽고메리 곱합 잉여 연산 회로.
  6. 제4항에 있어서, 상기 곱합 연산기는 상기 곱합 연산기에 있어서의 자릿수 올림 가산기를 복수로 분할한 것을 특징으로 하는 몽고메리 곱합 잉여 연산 회로.
  7. 제4항에 있어서, 상기 몽고메리 곱합 잉여 연산에서 이용하는 데이터의 상기 메모리 상에서의 선두 어드레스를 기억하는 포인터 기억 레지스터를 더욱 가지고, 외부의 제어부에 의해 상기 데이터의 상기 메모리 상에서의 입출력처로서 지정된 데이터 영역명을 바꾸지 않고서 상기 포인터 기억 레지스터에 기억된 상기 선두 어드레스를 교체함으로써 상기 제어부에서 참조 가능한 상기 데이터를 교체하는 것을 특징으로 하는 몽고메리 곱합 잉여 연산 회로.
KR1020040063153A 2004-01-26 2004-08-11 다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합잉여 연산 회로 KR100682354B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JPJP-P-2004-00017205 2004-01-26
JP2004017205A JP4408712B2 (ja) 2004-01-26 2004-01-26 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路

Publications (2)

Publication Number Publication Date
KR20050077001A true KR20050077001A (ko) 2005-07-29
KR100682354B1 KR100682354B1 (ko) 2007-02-15

Family

ID=34650749

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040063153A KR100682354B1 (ko) 2004-01-26 2004-08-11 다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합잉여 연산 회로

Country Status (5)

Country Link
US (1) US8078661B2 (ko)
EP (1) EP1560110A1 (ko)
JP (1) JP4408712B2 (ko)
KR (1) KR100682354B1 (ko)
CN (1) CN100504758C (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4544870B2 (ja) * 2004-01-26 2010-09-15 富士通セミコンダクター株式会社 演算回路装置
WO2007080652A1 (ja) * 2006-01-13 2007-07-19 Fujitsu Limited モンゴメリ法用乗算剰余計算装置
EP2138990B1 (en) * 2007-03-19 2013-05-15 Fujitsu Limited Built-in device with fault attack countermeasure function
US8028015B2 (en) * 2007-08-10 2011-09-27 Inside Contactless S.A. Method and system for large number multiplication
JP5097138B2 (ja) * 2009-01-15 2012-12-12 シャープ株式会社 モンゴメリ乗算のための演算回路及び暗号回路
WO2011036746A1 (ja) * 2009-09-24 2011-03-31 株式会社東芝 演算装置
US8478969B2 (en) * 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
US9343124B1 (en) * 2011-07-29 2016-05-17 Altera Corporation Method and system for operating a multi-port memory system
US9081657B2 (en) * 2011-10-13 2015-07-14 Conexant Systems, Inc. Apparatus and method for abstract memory addressing
US9384168B2 (en) 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
US10003460B2 (en) * 2013-10-10 2018-06-19 Nippon Telegraph And Telephone Corporation Secret quotient transfer device, secret bit decomposition device, secret modulus conversion device, secret quotient transfer method, secret bit decomposition method, secret modulus conversion method, and programs therefor
EP3087470B1 (en) * 2013-12-28 2020-03-25 Intel Corporation Rsa algorithm acceleration processors, methods, systems, and instructions
US11262982B2 (en) * 2018-07-23 2022-03-01 SK Hynix Inc. Computation circuit including a plurality of processing elements coupled to a common accumulator, a computation device and a system including the same
JP7129857B2 (ja) * 2018-09-07 2022-09-02 ルネサスエレクトロニクス株式会社 積和演算装置、積和演算方法、及びシステム
CN109669666B (zh) * 2018-11-06 2022-12-16 清华大学 乘累加处理器
CN109669670B (zh) * 2018-12-26 2020-09-22 贵州华芯通半导体技术有限公司 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置
WO2020159800A1 (en) * 2019-01-28 2020-08-06 Rambus Inc. Memory-integrated neural network
CN109933304B (zh) * 2019-03-20 2022-06-21 成都三零嘉微电子有限公司 适用于国密sm2p256v1算法的快速蒙哥马利模乘器运算优化方法
DE102020102453A1 (de) * 2020-01-31 2021-08-05 Infineon Technologies Ag Integrierte Schaltung zum modularen Multiplizieren von zwei ganzen Zahlen für ein kryptographisches Verfahren und Verfahren zur kryptographischen Verarbeitung von Daten basierend auf modularer Multiplikation
WO2021217034A1 (en) * 2020-04-23 2021-10-28 University Of Southern California Design of high-performance and scalable montgomery modular multiplier circuits
CN113076061A (zh) * 2021-03-18 2021-07-06 四川和芯微电子股份有限公司 单ram多模块数据的缓存方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG52303A1 (en) * 1993-12-20 1998-09-28 Motorola Inc Arithmetic engine
GB2291515B (en) * 1994-07-14 1998-11-18 Advanced Risc Mach Ltd Data processing using multiply-accumulate instructions
US5787025A (en) * 1996-02-28 1998-07-28 Atmel Corporation Method and system for performing arithmetic operations with single or double precision
US5941940A (en) * 1997-06-30 1999-08-24 Lucent Technologies Inc. Digital signal processor architecture optimized for performing fast Fourier Transforms
US5847981A (en) * 1997-09-04 1998-12-08 Motorola, Inc. Multiply and accumulate circuit
US6085210A (en) 1998-01-22 2000-07-04 Philips Semiconductor, Inc. High-speed modular exponentiator and multiplier
US6484194B1 (en) 1998-06-17 2002-11-19 Texas Instruments Incorporated Low cost multiplier block with chain capability
KR100322740B1 (ko) * 1998-07-10 2002-03-08 윤종용 모듈러 연산장치 및 그 방법
KR100325430B1 (ko) * 1999-10-11 2002-02-25 윤종용 상이한 워드 길이의 산술연산을 수행하는 데이터 처리장치 및 그 방법
US6557022B1 (en) * 2000-02-26 2003-04-29 Qualcomm, Incorporated Digital signal processor with coupled multiply-accumulate units
US6957242B1 (en) * 2000-10-26 2005-10-18 Cypress Semiconductor Corp. Noninterfering multiply-MAC (multiply accumulate) circuit
JP3709553B2 (ja) * 2000-12-19 2005-10-26 インターナショナル・ビジネス・マシーンズ・コーポレーション 演算回路および演算方法

Also Published As

Publication number Publication date
US20050165876A1 (en) 2005-07-28
CN1648853A (zh) 2005-08-03
EP1560110A1 (en) 2005-08-03
CN100504758C (zh) 2009-06-24
US8078661B2 (en) 2011-12-13
JP2005209095A (ja) 2005-08-04
KR100682354B1 (ko) 2007-02-15
JP4408712B2 (ja) 2010-02-03

Similar Documents

Publication Publication Date Title
KR100682354B1 (ko) 다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합잉여 연산 회로
JP4870932B2 (ja) 多重精度を支援する拡張型モンゴメリモジュラ掛け算器
CN1503937B (zh) 扩展精度累加器
JP5266354B2 (ja) ガロア拡大体・積算/積算加算・積和演算装置
US6671709B2 (en) Multiplier cell and method of computing
US5745398A (en) Method for the implementation of modular multiplication according to the Montgomery method
US20020010730A1 (en) Accelerated montgomery exponentiation using plural multipliers
JP4201980B2 (ja) マルチプレシジョン整数演算用の装置
JP2009230153A (ja) モントゴメリー乗算に基づくモジュラ乗算及び累乗の改善された装置と方法
EP1471420A2 (en) Montgomery modular multiplier and method thereof using carry save addition
KR20110105555A (ko) 효율적인 하드웨어 구성을 갖는 몽고메리 승산기
KR100442218B1 (ko) 몽고메리의 알고리즘을 이용한 멱승 잉여 연산기
US8781112B2 (en) Signed montgomery arithmetic
Shieh et al. A new algorithm for high-speed modular multiplication design
Gutub et al. Efficient scalable VLSI architecture for Montgomery inversion in GF (p)
JP4823467B2 (ja) ガロア体からの二つの係数を乗算するための方法及びこの方法を遂行するための乗算器
KR20130128695A (ko) 모듈러 계산 유닛 및 그것을 포함하는 보안 시스템
US6963644B1 (en) Multi-word arithmetic device for faster computation of cryptosystem calculations
JP2004258141A (ja) モンゴメリ乗算剰余の多倍長演算のための演算装置
KR20080050226A (ko) 모듈러 곱셈 장치 및 설계 방법
KR101128505B1 (ko) 모듈러 곱셈 연산 방법 및 장치
JP2001034167A (ja) 演算装置及び暗号処理装置
KR100481586B1 (ko) 모듈러 곱셈 장치
JP2000207387A (ja) 演算装置及び暗号処理装置
KR100417136B1 (ko) 다항식 기저에서 유한체 승산 장치 및 그 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130118

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20140117

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20150119

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20160119

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20170119

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20180118

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20190116

Year of fee payment: 13