KR100945241B1 - 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법 - Google Patents

캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법 Download PDF

Info

Publication number
KR100945241B1
KR100945241B1 KR1020080087350A KR20080087350A KR100945241B1 KR 100945241 B1 KR100945241 B1 KR 100945241B1 KR 1020080087350 A KR1020080087350 A KR 1020080087350A KR 20080087350 A KR20080087350 A KR 20080087350A KR 100945241 B1 KR100945241 B1 KR 100945241B1
Authority
KR
South Korea
Prior art keywords
value
memory
variable
integer
sum
Prior art date
Application number
KR1020080087350A
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 KR1020080087350A priority Critical patent/KR100945241B1/ko
Application granted granted Critical
Publication of KR100945241B1 publication Critical patent/KR100945241B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • G06F12/0684Configuration or reconfiguration with feedback, e.g. presence or absence of unit detected by addressing, overflow detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/08Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations, the intermediate ones not being accessible for either enqueue or dequeue operations, e.g. using a shift register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 캐리를 갖는 피드백 쉬프트 레지스터(FCSR : Feedback with Carry Shift Register)의 소프트웨어 구현 방법에 관한 것으로, 캐리에 의한 오버플로우가 발생되지 않도록 정수합을 3단계로 나누어 계산하거나 또는 각 레지스터값을 저장하기 위한 32비트의 변수에 16비트의 정보만을 저장함으로써, 종래의 방법에 비해 불필요한 메모리의 낭비가 없으면서 고속 동작이 가능한 소프트웨어를 구현할 수 있다.
FCSR, 캐리, 오버플로우, 소프트웨어, 정수합, 레지스터

Description

캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법{The method of software implementation of feedback with carry shift register}
본 발명은 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법에 관한 것으로, 더 자세하게는 캐리를 갖는 피드백 쉬프트 레지스터를 소프트웨어로 구현할 때 불필요한 메모리의 낭비가 없으면서 고속 동작이 가능하도록 구현하는 방법에 관한 것이다.
캐리를 갖는 피드백 쉬프트 레지스터(Feedback with Carry Shift Register, 이하 'FCSR'이라 함)는 간단한 구조를 가지면서 매우 큰 주기를 갖는 수열을 발생시키는 쉬프트 레지스터의 한 종류로서, 스트림 암호기 및 난수 발생기 등에 많이 사용된다.
일반적으로 FCSR은 각 쉬프트 레지스터에 하나의 비트가 저장되어 하나의 클럭마다 하나의 비트들을 이동시키면서 출력하는 구조를 가지며, 낮은 게이트 복잡도로 구현이 가능하다.
하지만, 이와 같은 FCSR을 컴퓨터에서 실행가능한 소프트웨어로 구현하는 경 우, FCSR은 비트 단위로 데이터를 처리하는 반면 컴퓨터는 워드 기반으로 데이터를 처리하기 때문에, 다음에 설명하는 바와 같은 문제점이 있다.
도 1은 종래의 비트 기반의 FCSR을 개략적으로 나타낸 도면이다.
도 1을 참조하면, 종래의 비트 기반의 FCSR(100)은 쉬프트 레지스터부(110), 연결 정수부(120), 메모리부(130) 및 합산부(140)로 구성된다.
쉬프트 레지스터부(110)는 r개의 쉬프트 레지스터로 구성되며, 각 쉬프트 레지스터에는 {an -1, an -2, …, an -r}의 초기값이 저장되어 있다.
연결 정수부(120)는 쉬프트 레지스터부(110)와의 연결 상태를 나타내는 연결수 성분 qi(i = 1, 2, …, r)들로 이루어지며, 상기 연결수 성분 qi 들은 q = q1*232 + q2*22*32+ … + qr2r *32-1, qi∈ {0, 1,…, 232-1}와 같은 전개를 만족하는 연결수 q에 포함된다.
메모리부(130)는 0에서 r-1 의 정수값을 저장할 수 있다.
합산부(140)는 연결 정수부(120)의 연결수 성분 qi(i = 1, 2, …, r)값과 쉬프트 레지스터부(110)의 레지스터값을 입력받아 아래의 수학식 1과 같은 정수합(Σn)을 구한다.
Σn = q1 * an-1 + q2 * an-2 + … + qr * an-r + mn-1
여기에서, mn-1은 쉬프트 레지스터부(110)에 저장된 메모리값을 나타낸다.
이후, 쉬프트 레지스터부(110)는 최하위 비트 an -r를 출력한 후, 각 쉬프트 레지스터의 레지스터값들을 오른쪽으로 하나씩 쉬프트한다. 이 때, 쉬프트 레지스터부(110)의 최상위 비트에는 합산부(140)의 출력 Σn mod 2이 입력된다. 여기에서, 상기 Σn mod 2란, 정수합(Σn)을 정수 2로 나누었을 때의 나머지(0 또는 1)를 의미한다.
다음으로, 합산부(140)의 출력 (Σn- an -1)/2 이 메모리부(130)로 입력되어 저장된다.
이와 같은 비트 기반의 FCSR를 소프트웨어로 구현하기 위한 종래의 방법을 도 2를 참조하여 설명하면 다음과 같다.
도 2는 비트 기반의 FCSR을 소프트웨어로 구현하기 위한 종래의 방법을 나타낸 도면이다.
도 2를 참조하면, 비트 기반의 FCSR를 소프트웨어로 구현하기 위한 종래의 방법은 크게 다음의 6단계(S210~S260)로 이루어진다.
(1) 변수 선언 단계(S210) : r개의 레지스터값을 저장하기 위한 배열 R[], 메모리값을 저장하기 위한 변수 M, 정수합을 저장하기 위한 변수 S를 선언한다.
(2) 초기값 할당 단계(S220) : 배열 R[]에 r개의 초기 레지스터값을 할당하고, 변수 M에 초기 메모리값을 할당한다.
(3) 정수합 계산 단계(S230) : 상기 수학식 1을 이용하여 정수합을 계산하여 변수 S에 저장한다.
S = R[r-1]*q1 + R[r-2]*q2 + … + R[0]*qr + M;
(4) 레지스터값 이동 단계(S240) : 배열 R[]에 저장된 값을 하나씩 이동시킨다. 이 때, R[0]는 1비트의 제1 출력값이 된다.
for (i = 0; i < r-1; i++) R[i] = R[i+1];
(5) 새로운 레지스터값과 메모리값 계산 단계(S250) : S % 2를 계산하여 R[r-1]에 저장하고, (S - R[r-1])/2를 계산하여 변수 M에 저장한다.
R[r-1] = S % 2;
M = (S - R[r-1])/2;
(6) 레지스터값 갱신 반복 단계(S260) : 원하는 비트의 출력을 얻을 때까지 레지스터값 갱신 과정, 즉, 상기 정수합 계산 단계(S230)에서 상기 새로운 레지스터값과 메모리값 계산 단계(S250)까지의 과정을 반복한다.
위와 같은 방법을 이용하여 비트 기반의 FCSR을 소프트웨어로 구현하면, 워드로 선언된 배열 R[]의 원소마다 1비트씩만 저장되기 때문에 메모리가 불필요하게 많이 낭비되는 문제점이 있다. 또한, 1회의 동작으로 1비트의 출력만 얻을 수 있으므로 매우 비효율적이라는 문제점도 있다.
이러한 문제점을 해결하기 위한 방법으로, 각 쉬프트 레지스터의 크기를 1비트가 아닌 컴퓨터에서 일반적으로 사용하는 워드(예를 들면, 32비트)의 크기로 하여 한번의 동작으로 하나의 워드씩 출력하는 FCSR이 개시되어 있다.
하지만, 이러한 워드 기반의 FCSR을 소프트웨어로 구현하는 경우, 비트 기반 의 FCSR의 경우와 달리 정수합 계산 단계에서 정수합이 32비트를 넘을 수 있으며, 이로 인하여 캐리에 의한 오버플로우가 발생할 수 있다.
이러한 오버플로우 문제를 해결하는 방법으로는, 변수 선언 단계에서 정수합을 저장할 변수 S를 64비트로 선언하는 방법과, 조건문을 이용하여 캐리를 처리하는 방법이 있다.
하지만, 정수합을 저장할 변수 S를 64비트로 선언하는 방법의 경우에는 32비트 연산에 비하여 처리 속도가 매우 느리다는 한계점이 있으며, 조건문을 사용하는 방법의 경우에도 조건문으로 인해 처리 속도가 느려지는 한계점이 있다.
따라서, 본 발명은 상기와 같은 문제점을 해결하기 위해 안출한 것으로서, 본 발명의 목적은 FCSR을 소프트웨어로 구현할 때 불필요한 메모리의 낭비가 없으면서 고속 동작이 가능하도록 구현하는 것이다.
상기 목적을 달성하기 위하여 본 발명의 제1 실시예에 따른 FCSR의 소프트웨어 구현 방법은, (a) r개의 각 레지스터값을 저장하기 위한 배열 변수, 1개의 메모리값을 저장하기 위한 메모리 변수, 정수합의 부분값을 저장하기 위한 제1, 2, 3 변수를 워드형으로 선언하고, 상기 배열 변수와 상기 메모리 변수에 초기 레지스터값과 초기 메모리값을 각각 할당하는 단계; (b) 캐리가 발생하지 않도록 정수합을 제1, 2, 3 부분 정수합으로 나누어 계산하여 상기 제1, 2, 3 변수에 각각 저장하는 단계; (c) 상기 제1, 2 부분 정수합에 따라 새로운 메모리값을 계산하는 단계; (d) 상기 배열 변수에 저장된 레지스터값을 하나씩 이동시켜 제1 출력값을 얻고, 상기 제2, 3 부분 정수합에 따라 상기 배열 변수의 새로운 레지스터값을 계산하는 단계; 및 (e) 원하는 비트의 출력을 얻을 때까지 상기 레지스터값을 갱신하는 단계를 포함하는 것을 특징으로 한다.
여기에서, 쉬프트 레지스터부, 연결 정수부, 메모리부 및 합산부로 이루어진 FCSR이 소정의 전제 조건을 만족하는 경우, 상기 (a) 단계 내지 상기 (e) 단계를 수행하며, 상기 소정의 전제 조건은, 상기 합산부에서 계산되는 정수합의 크기가 워드 크기를 초과하지 않는 제1 전제 조건과, 상기 메모리부에 저장되는 메모리값의 최대값이 워드 크기를 초과하지 않는 제2 전제 조건과, 상기 메모리부에 저장되는 메모리값의 크기가 일정하게 유지되는 제3 전제 조건을 포함한다.
상기 연결 정수부는 상기 쉬프트 레지스터부와의 연결 상태를 나타내는 연결수 성분 qi(i = 1, 2, …, r)들로 이루어지며, 상기 연결수 성분 qi 들은 q = q1*232 + q2*22*32+ … + qr2r *32-1, qi∈ {0,1,…, 232-1}와 같은 전개를 만족하는 연결수 q에 포함된다.
상기 (b) 단계에서, 다음의 <식 1> 에 의해 상기 제1, 2, 3 부분 정수합을 계산하여 상기 제1, 2, 3 변수에 각각 저장한다.
<식 1>
Σn = (2t1 * as1 + 2t2 * as2 + … + 2tw * asw) + mn -1
(여기에서, Σn은 정수합, 2ti(1≤i≤w)는 상기 연결 정수부의 연결수 성분 qi을 이진 전개하였을 때 나타나는 2의 거듭제곱, asi는 상기 쉬프트 레지스터부에 저장된 각 레지스터값, mn-1은 상기 쉬프트 레지스터부에 저장된 메모리값, w는 상기 연결 정수부의 연결수 성분 qi를 이진 전개하였을 때 나타나는 해밍 웨이트의 총합을 각각 의미함)
구체적으로, 상기 <식 1>에 의해 모든 1≤ i ≤ w에 대하여 상기 2ti * asi값 중에서 232보다 크거나 같은 부분의 합을 계산하여 상기 제1 변수에 저장하고, 상기 <식 1>에서 2의 지수 중에서 최소값을 t라 할 때 상기 <식 1>에 의해 모든 1≤ i ≤ w에 대하여 2ti-t * asi값의 합과 상기 메모리 변수에서 상기 t비트 보다 상위에 있는 메모리값을 합하여 상기 제2 변수에 저장하며, 상기 메모리 변수에서 상기 t비트 보다 하위에 있는 메모리값을 합하여 상기 제3 변수에 저장한다.
한편, 상기 목적을 달성하기 위하여 본 발명의 제2 실시예에 따른 FCSR의 소프트웨어 구현 방법은, (a) 각 레지스터값을 저장하기 위한 배열 변수, 메모리값을 저장하기 위한 메모리 변수, 정수합의 부분값을 저장하기 위한 제1, 2 변수를 워드형으로 선언하는 단계; (b) 캐리가 발생하지 않도록 각 초기 레지스터값을 두개로 각각 나누어서 상기 배열 변수에 할당하고 초기 메모리값을 상기 메모리 변수에 할당하는 단계; (c) 정수합을 제1, 2 부분 정수합으로 나누어 계산하여 상기 제1, 2 변수에 각각 저장하고, 상기 제1, 2 부분 정수합에 따라 새로운 메모리값을 계산하는 단계; (d) 상기 배열 변수에 저장된 레지스터값을 두개씩 이동시켜 제1 출력값을 얻고, 상기 제1, 2 부분 정수합에 따라 상기 배열 변수의 새로운 레지스터값을 계산하는 단계; 및 (e) 원하는 비트의 출력을 얻을 때까지 상기 레지스터값을 갱신하는 단계를 포함하는 것을 특징으로 한다.
여기에서, 쉬프트 레지스터부, 연결 정수부, 메모리부 및 합산부로 이루어진 FCSR이 소정의 전제 조건을 만족하는 경우, 상기 (a) 단계 내지 상기 (e) 단계를 수행하며, 상기 소정의 전제 조건은, 상기 메모리부에 저장되는 메모리값의 최대값 이 워드 크기를 초과하지 않는 제1 전제 조건과, 상기 메모리부에 저장되는 메모리값의 크기가 일정하게 유지되는 제2 전제 조건을 포함한다.
상기 (a) 단계에서 상기 각 레지스터값의 개수가 r개인 경우, 2r개의 원소를 갖도록 상기 배열 변수를 선언하며, 상기 (b) 단계에서 상기 각 초기 레지스터값을 16비트씩 각각 두개로 나누어서 상기 배열 변수에 각각 16비트씩 나누어 할당하고, 상기 초기 메모리값을 상기 메모리 변수에 할당한다.
상기 (c) 단계에서, 상기 제1 부분 정수합을 계산하여 상기 제1 변수의 16비트에 저장하고, 상기 제2 부분 정수합을 계산하여 상기 제2 변수의 16비트에 저장한다. 그리고, 상기 제1 변수에 저장된 제1 부분 정수합을 16비트 이동시켜 상기 메모리 변수의 16비트에 저장하며, 상기 제 2 변수에 저장된 제2 부분 정수합을 16비트 이동시켜 상기 메모리 변수의 나머지 16비트에 저장한다.
본 발명에 따르면, FCSR을 소프트웨어로 구현할 때 불필요한 메모리의 낭비를 방지할 수 있으므로, FCSR을 응용한 스트림 암호기, 난수 발생기 등을 소프트웨어로 구현할 때 매우 유용하다.
또한, 본 발명에 따르면, FCSR을 소프트웨어로 구현할 때 쉬프트, 모듈라 덧셈, 마스킹 연산만으로 구현이 가능하므로, 종래의 방법에 비해 고속 동작이 가능하다.
이하, 본 발명의 실시예에 대하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
아래의 설명에서는 워드(word)가 일반적으로 컴퓨터의 CPU에서 한번에 처리할 수 있는 자료의 단위인 32비트인 것으로 설명하지만, 추후 64비트, 128비트 등이 워드가 되는 경우에도 같은 방법으로 적용할 수 있음은 물론이다.
도 3은 워드 기반의 FCSR을 개략적으로 나타낸 도면이다.
도 3을 참조하면, 워드 기반의 FCSR(300)은, 쉬프트 레지스터부(310), 연결 정수부(320), 메모리부(330) 및 합산부(340)로 구성된다.
즉, 워드 기반의 FCSR(300)은, 비트 기반의 FCSR(100)과 비교하여 쉬프트 레지스터부(310)를 구성하는 각 쉬프트 레지스터의 크기와 연결 정수부(320)를 구성하는 연결수 성분 qi의 크기가 32비트인 것을 제외하고는 다른 구성요소는 동일하다.
동작에 있어서도, 워드 기반의 FCSR(300)은, 합산부(340)의 출력 Σn mod 232이 쉬프트 레지스터부(310)의 최상위 비트에 입력되는 것과, 메모리부(330)의 메모리값이 (Σn- an-1)/232 로 갱신되는 것을 제외하고는 비트 기반의 FCSR(100)과 동일한 방식으로 동작한다.
이와 같이 구성된 워드 기반의 FCSR(300)에 있어서, 연결 정수부(320)의 연 결수 q는 다음의 수학식 2와 같이 표현할 수 있다.
q = q1 * 232 + q2 * 264 + … + qr * 232*r - 1
여기에서, 모든 qi(i=1, 2, …, r)는 0에서 232-1 사이의 정수이다.
이와 같은 워드 기반의 FCSR(300)을 소프트웨어로 구현하는 방법에 대하여 더 자세히 설명하면 다음과 같다.
< 제1 실시예 >
제1 실시예에서는 정수합을 3단계로 나누어 계산하여 정수합을 계산하는 각 단계에서 결과값의 크기가 32비트를 넘지 않도록 하는 방법을 이용한다.
도 4는 본 발명의 제1 실시예에 따른 정수합 계산 방법을 설명하기 위한 도면이다.
먼저, 정수합을 계산하기 위해서는 상기 수학식 1에서와 같이 각 레지스터값과 각 연결수 성분 qi를 곱하여 얻어진 값에 메모리값을 더해야 한다.
이 때, 정수합을 3단계로 나누어 계산하게 되면 정수합을 계산하는 각 단계에서 결과값의 크기가 32비트를 넘지 않게 되며, 이에 따라 캐리에 의한 오버플로우가 발생하지 않게 되는 것이다.
설명의 편의를 위해 상기 수학식 2에서 q를 qi중에서 0이 아닌 항의 합으로만 나타내면 다음의 수학식 3과 같이 나타낼 수 있다.
q = qn1 * 232* n1 + qn2* 232* n2 + … + qnk * 232* nk - 1
여기에서, 1 ≤ n1 < n2 < … < nk = r 이다.
상기 수학식 3에서 각 연결수 성분 qni를 이진 전개하면 다음의 수학식 4와 같이 나타낼 수 있다.
Figure 112008063049318-pat00001
여기에서, 0≤
Figure 112008063049318-pat00002
<
Figure 112008063049318-pat00003
< … <
Figure 112008063049318-pat00004
< 32 이고, ji는 qni의 해밍 웨이트이다.
설명의 편의상 각 연결수 성분 qn1, qn2, …, qnk의 해밍 웨이트의 총합을 w라고 하면, w = j1 + j2 +…+ jk이 된다.
따라서, 상기 수학식 1의 정수합 계산식에서, 각 연결수 성분 qni을 모두 이진 전개하여 2의 지수를 크기 순서대로 t1≤t2≤…≤tw 가 되도록 재배열하고, 재배열된 2의 지수의 순서에 맞게 ai의 순서를 적당히 바꾸어 정수합(Σn)을 전개하면 다음의 수학식 5와 같이 나타낼 수 있다.
Σn = (2t1 * as1 + 2t2 * as2 + … + 2tw * asw) + mn -1
여기에서, 2의 지수 중에서 가장 작은 값 t1을 설명의 편의상 t라고 한다.
상기 수학식 5에 의하면, 정수합(Σn)을 계산하는 과정은 도 4에 도시된 바와 같이 제1 부분 정수합(S1)을 계산하는 단계와, 제2 부분 정수합(S2)을 계산하는 단계와, 제3 부분 정수합(S3)을 계산하는 단계로 나눌 수 있다.
즉, 정수합(Σn)을 계산할 때, 먼저 2ti * asi값 중에서 232보다 크거나 같은 부분의 합(S1)을 계산한 다음, 다음으로 2ti -t * asi값의 합과 t비트 보다 상위에 있는 메모리값의 합(S2)을 계산하며, 마지막으로 t비트 보다 하위에 있는 메모리값의 합(S3)을 계산한다.
이와 같이 정수합(Σn)을 제1, 2, 3 부분 정수합(S1, S2, S3)으로 나누어 계산하면, 정수합을 계산하는 각 단계에서 결과값의 크기가 32비트를 넘지 않게 되어 캐리에 의한 오버플로우가 발생하지 않게 된다.
여기에서, 정수합의 크기가 32비트를 넘지 않기 위해서 다음의 3가지 전제 조건을 만족해야 한다.
[1] 상기 합산부에서 계산되는 정수합의 크기가 워드 크기를 초과하지 않도록 t ≤ log2(w) 를 만족해야 한다. 여기에서, t ≤ log2(w)는 제2 부분 정수합(S2)의 크기가 32비트를 초과하지 않도록 하는 조건으로, 그 이유는 도 4에 도시된 바 와 같이 정수합을 3단계로 나누어 구할 때 제2 부분 정수합(S2)의 값이 32비트를 초과할 가능성이 높기 때문이다.
[2] 메모리값의 최대값이 32비트를 초과하지 않도록 (qn1 + qn2 + … + qnk) - 1 < 232 를 만족해야 한다.
[3] 메모리값의 초기값 할당 및 갱신 과정에서 메모리값의 크기가 일정하게 유지되도록 0 ≤ mr -1 ≤ (qn1 + qn2 + … + qnk) - 1를 만족해야 한다.
상기와 같은 3가지 전제 조건을 만족하는 조건하에서 워드 기반의 FCSR을 소프트웨어로 구현하는 방법에 대하여 더 자세히 설명하면 다음과 같다.
도 5는 본 발명의 제1 실시예에 따른 FCSR의 소프트웨어 구현 방법을 나타낸 흐름도이다.
도 5를 참조하면, 본 발명의 제1 실시예에 따른 FCSR의 소프트웨어 구현 방법은 크게 다음의 6단계(S510~S560)로 이루어지며, 각 단계에 대하여 더 자세히 설명하면 다음과 같다.
(1-1) 변수 선언 및 초기값 할당 단계(S510)
r개의 레지스터값을 저장하기 위한 32비트 배열 R[], 메모리값을 저장하기 위한 변수 M, 정수합의 부분값을 저장하기 위한 변수 S1, S2, S3를 선언한 후, 배열 R[]에 r개의 초기 레지스터값을 할당하고, 변수 M에 초기 메모리값을 할당한다.
이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
unsigned int R[], M, S1, S2, S3;
R[0], … , R[r-1], M;
(1-2) 정수합 계산 단계(S520)
종래에는 상기 수학식 1에 의해 정수합을 계산하지만, 본 실시예에서는 전술한 바와 같이 상기 수학식 6을 이용하여 정수합을 3단계로 나누어 계산한다. 즉, 본 실시예에서 정수합(Σn)을 계산하는 과정은 도 4에 도시된 바와 같이 제1 부분 정수합(S1) 계산 단계(S521), 제2 부분 정수합(S2) 계산 단계(S522), 제3 부분 정수합(S3) 계산 단계(S523)로 나눌 수 있다.
① 제1 부분 정수합(S1) 계산 단계(S521)
모든 1≤ i ≤ w에 대하여 2ti * asi값 중에서 232보다 크거나 같은 부분의 합을 계산하여 제1 부분 정수합(S1)에 저장하며, 이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
S1 = (R[n1-1] >>(32-t(1,1))) + (R[n1-1] >>(32-t(1,2))) + … + (R[n1-1] >>(32-t(1,j1))) + (R[n2-1] >>(32-t(2,1))) + (R[n2-1] >>(32-t(2,2)))+ … + (R[n2-1] >>(32-t(2,j2))) + … + (R[nk-1] >>(32-t(k,1))) + (R[nk-1] >>(32-t(k,2))) + … + (R[nk-1] >>(32-t(k,jk)));
② 제2 부분 정수합(S2) 계산 단계(S522)
모든 1≤ i ≤ w에 대하여 2ti -t * asi값의 합과 상기 변수 M에서 t비트 보다 상위에 있는 메모리값을 합하여 제2 부분 정수합(S2)에 저장하며, 이 과정을 프로 그래밍 언어(C 언어)로 표기하면 다음과 같다.
S2 = ((R[n1-1] & ((1<<(32-t(1,1)))-1))<<(t(1,1)-t)) + ((R[n1-1] & ((1<<(32-t(1,2)))-1))<<(t(1,2)-t)) + … + ((R[n1-1] & ((1<<(32-t(1,j1)))- 1))<<(t(1,j1)-t)) + ((R[n2-1] & ((1<<(32-t(2,1)))-1))<<(t(2,1)-t)) + ((R[n2-1] & ((1<<(32-t(2,2)))-1))<<(t(2,2)-t)) + … + ((R[n2-1] & ((1<<(32-t(2,j2)))-1))<<(t(2,j2)-t)) + … + ((R[nk-1] & ((1<<(32-t(k,1)))- 1))<<(t(k,1)-t)) + ((R[nk-1] & ((1<<(32-t(k,2)))-1))<<(t(k,2)-t)) + … + ((R[nk-1] & ((1<<(32-t(k,jk)))-1))<<(t(k,jk)-t)) + (M >> t);
③ 제3 부분 정수합(S3) 계산 단계(S523)
상기 제1, 2 부분 정수합(S1, S2)을 제외한 나머지 부분, 즉, 상기 변수 M에서 t비트 보다 하위에 있는 메모리값을 합하여 제3 부분 정수합(S3)에 저장하며, 상기 제3 부분 정수합(S3)은 레지스터값을 갱신할 때 사용된다.
이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
S3 = M & ((1<<t) -1);
(1-3) 메모리값 계산 단계(S530)
상기 정수합 계산 단계(S520)에서 계산된 제1, 2 부분 정수합(S1, S2)을 이용하여 다음 시각에 사용할 메모리값을 계산하며, 이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
M = S1 + (S2>>(32-t));
(1-4) 레지스터값 이동 단계(S540)
배열 R[]에 저장된 값을 하나씩 이동시키며, 이 때, R[0]는 32비트의 제1 출력값이 된다.
이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
for (i = 0; i < r-1; i++)     R[i] = R[i+1];
printf("%08x ", R[0]);
(1-5) 새로운 레지스터값 계산 단계(S550)
상기 정수합 계산 단계(S520)에서 계산된 제2, 3 부분 정수합(S2, S3)을 이용하여 새로운 r번째 레지스터값 R[r-1]을 계산하며, 이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
R[r-1] = (S2 << t) + S3;
(1-6) 레지스터값 이동 반복 단계(S560)
원하는 비트의 출력을 얻을 때까지 레지스터값 갱신 과정, 즉, 상기 정수합 계산 단계(S520)에서 상기 새로운 레지스터값 계산 단계(S550)까지의 과정을 반복한다.
< 제2 실시예 >
제2 실시예에서는 각 레지스터값을 저장하기 위한 32비트의 변수에 16비트의 정보만 저장되도록 함으로써 정수합을 계산하는 각 단계에서 결과값의 크기가 32비트를 넘지 않도록 하는 방법을 이용한다.
우선, 32비트의 초기 레지스터값을 두개의 16비트로 나누어 두개의 32비트 변수에 16비트씩 각각 나누어 저장한다.
이렇게 쉬프트 레지스터의 크기에 비해 저장되는 값이 작으면 정수합을 계산하는 각 단계에서 결과값의 크기가 32비트를 넘지 않게 되며, 이에 따라 캐리에 의한 오버플로우가 발생하지 않게 되는 것이다.
여기에서, 정수합의 크기가 32비트를 넘지 않기 위해서 다음의 2가지 전제를 만족해야 한다.
[1] 메모리값의 최대값이 16비트를 넘지 않도록 (qn1 + qn2 + … + qnk) - 1 < 216 를 만족해야 한다.
[2] 메모리값의 초기값 할당 및 갱신 과정에서 메모리값의 크기가 일정하게 유지되도록 0 ≤ mr -1 ≤ (qn1 + qn2 + … + qnk) - 1를 만족해야 한다.
상기와 같은 2가지 전제를 만족하는 조건하에서 워드 기반의 FCSR을 소프트웨어로 구현하는 방법에 대하여 더 자세히 설명하면 다음과 같다.
도 6은 본 발명의 제2 실시예에 따른 FCSR의 소프트웨어 구현 방법을 나타낸 흐름도이다.
도 6을 참조하면, 본 발명의 제2 실시예에 따른 FCSR의 소프트웨어 구현 방법은 크게 다음의 5단계(S610~S650)로 이루어지며, 각 단계에 대하여 더 자세히 설명하면 다음과 같다.
(2-1) 변수 선언 및 초기값 할당 단계(S610)
먼저 2r개의 레지스터값을 저장하기 위한 32비트 배열 R[2*r], 메모리값을 저장하기 위한 변수 M, 정수합의 부분값을 저장하기 위한 변수 S1, S2를 선언한다. 이 때, FCSR에서 32비트의 쉬프트 레지스터를 두개의 16비트로 분할하여 사용하기 때문에 r개가 아닌 2r개의 레지스터값을 저장하기 위한 32비트 배열 R[2*r]을 선언한다.
그 다음, 배열 R[2*r]에 2r개의 초기 레지스터값을 각각 할당하고, 변수 M에 초기 메모리값을 할당한다. 이 때, 각 초기 레지스터값을 16비트씩 두개로 나누어서 두 개의 32비트 변수 R[2*r]에 16비트씩 할당한다.
이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
unsigned int R[2*r], M, S1, S2;
R[0], … , R[2*r-1], M;
(2-2) 정수합 및 메모리값 계산 단계(S620)
제1, 2 부분 정수합(S1, S2) 및 메모리값(M)을 계산하여 변수 S1, S2, M에 각각 저장하며, 이 때에도 16비트씩만 채워서 저장한다.
이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
S1 = (R[2*(n1-1)] <<t1) + (R[2*(n2-1)] <<t2) + … + (R[2*(nk-1)] <<tk) + M;
M = (S1 >> 16);
S2 = (R[2*n1-1] <<t1) + (R[2*n2-1] <<t2) + … + (R[2*nk-1] <<tk) + M;
M = (S2 >>16);
(2-3) 레지스터값 이동 단계(S630)
배열 R[]에 저장된 값을 두개씩 이동시키며, 이 때, (R[1] <<16) + R[0]는 32비트의 제1 출력값이 된다.
이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
for (i = 0; i < 2*r-2; i++) R[i] = R[i+2];
(2-4) 새로운 레지스터값 계산 단계(S640)
상기 제1, 2 부분 정수합(S1, S2)을 이용하여 2*r-2번째와 2*r-1번째 레지스터값을 각각 계산하며, 이 과정을 프로그래밍 언어(C 언어)로 표기하면 다음과 같다.
R[2*r-2] = S1 & 0xFFFF;  R[2*r-1] = S2 & 0xFFFF;
(2-5) 레지스터값 이동 반복 단계(S650)
원하는 비트의 출력을 얻을 때까지 레지스터값 갱신 과정, 즉, 상기 정수합 및 메모리값 계산 단계(S620)에서 상기 새로운 레지스터값 계산 단계(S640)까지의 과정을 반복한다.
상기 제1 실시예 및 제2 실시예를 기반으로 FCSR의 소프트웨어 구현 방법을 프로그래밍 언어(C 언어)로 나타낸 소스 코드는 다음과 같다.
여기에서, 연결수 q = 8*232 + 4*296 + 8*2160 - 1라 하고, 초기 메모리값을 0으로 하면, 상기 제1 실시예를 위한 3가지 전제조건과 상기 제2 실시예를 위한 2가지 전제조건을 모두 만족한다.
#include <stdio.h>
#define  OUTBITS 10000000 // 출력비트수
#define  ITERATION (OUTBITS+31)/32 // 반복문 회수
void algorithm1(unsigned int R[5], unsigned int M)
{
int i;
unsigned int S1, S2, S3; // S510 단계
for(i=0; i<ITERATION; i++) // S560 단계
{
S1 = (R[0] >> 29) + (R[2] >> 30) + (R[4] >>29); // S521 단계
S2 = ((R[0] & 0x1FFFFFFF) << 1) + (R[2] & 0x3FFFFFFF)
      + ((R[4] & 0x1FFFFFFF) << 1) + (M>>2);  // S522 단계
S3 = (M & 0x3);   // S523 단계
M = S1 + (S2 >> 30);  // S530 단계
printf("%08x ", R[0]); // S540 단계
R[0] = R[1]; R[1] = R[2]; R[2] = R[3]; R[3] = R[4]; // S540 단계
R[4] = (S2 << 2) + S3; // S550 단계
}
}
void algorithm2(unsigned int R[10], unsigned int M)
{
int i;
unsigned int S1, S2; // S610 단계
for(i=0; i< ITERATION; i++) // S650 단계
{
S1 = (R[0]<<3) + (R[4]<<2) + (R[8]<<3) + M; // S620 단계
   M = (S1 >> 16);     // S620 단계
   S2 = (R[1]<<3) + (R[5]<<2) + (R[9]<<3) + M; // S620 단계
   M = (S2 >> 16);     // S620 단계
   printf("%08x ", (R[1]<<16)+R[0]);  // S630 단계
   R[0]=R[2]; R[1]=R[3]; R[2]=R[4]; R[3]=R[5]; // S630 단계
   R[4]=R[6]; R[5]=R[7]; R[6]=R[8]; R[7]=R[9]; // S630 단계
   R[8] = S1 & 0xFFFF; // S640 단계
   R[9] = S2 & 0xFFFF; // S640 단계
}
}
main()
{
  unsigned int state1[5], state2[10]; 
  state1[4] = 0x01234567;  state1[3] = 0x89abcdef; 
  state1[2] = 0x01020304;  state1[1] = 0x05060708;
  state1[0] = 0x090a0b0c; // S510 단계
  state2[9] = 0x0123; state2[8] = 0x4567; state2[7] = 0x89ab;
  state2[6] = 0xcdef;  state2[5] = 0x0102; state2[4] = 0x0304;
  state2[3] = 0x0506; state2[2] = 0x0708; state2[1] = 0x090a;
  state2[0] = 0x0b0c; // S610 단계
algorithm1(state1, 0);
algorithm2(state2, 0);
}
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았으며, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.
도 1은 종래의 비트 기반의 FCSR을 개략적으로 나타낸 도면이다.
도 2는 비트 기반의 FCSR를 소프트웨어로 구현하기 위한 종래의 방법을 나타낸 도면이다.
도 3은 워드 기반의 FCSR을 개략적으로 나타낸 도면이다.
도 4는 본 발명에 따른 정수합 계산 방법을 설명하기 위한 도면이다.
도 5는 본 발명의 제1 실시예에 따른 FCSR의 소프트웨어 구현 방법을 나타낸 흐름도이다.
도 6은 본 발명의 제2 실시예에 따른 FCSR의 소프트웨어 구현 방법을 나타낸 흐름도이다.
* 도면의 주요부분에 대한 부호의 설명 *
100 : 비트 기반의 FCSR
300 : 워드 기반의 FCSR
110, 310 : 쉬프트 레지스터부
120, 320 : 연결 정수부
130,  330: 메모리부
140,  340: 합산부

Claims (12)

  1. (a) r개의 각 레지스터값을 저장하기 위한 배열 변수, 1개의 메모리값을 저장하기 위한 메모리 변수, 정수합의 부분값을 저장하기 위한 제1, 2, 3 변수를 워드형으로 선언하고, 상기 배열 변수와 상기 메모리 변수에 초기 레지스터값과 초기 메모리값을 각각 할당하는 단계;
    (b) 캐리가 발생하지 않도록 정수합을 제1, 2, 3 부분 정수합으로 나누어 계산하여 상기 제1, 2, 3 변수에 각각 저장하는 단계;
    (c) 상기 제1, 2 부분 정수합에 따라 새로운 메모리값을 계산하는 단계;
    (d) 상기 배열 변수에 저장된 레지스터값을 하나씩 이동시켜 제1 출력값을 얻고, 상기 제2, 3 부분 정수합에 따라 상기 배열 변수의 새로운 레지스터값을 계산하는 단계; 및
    (e) 원하는 비트의 출력을 얻을 때까지 상기 레지스터값을 갱신하는 단계를 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  2. 제 1항에 있어서,
    쉬프트 레지스터부, 연결 정수부, 메모리부 및 합산부로 이루어진 캐리를 갖는 피드백 쉬프트 레지스터가 소정의 전제 조건을 만족하는 경우, 상기 (a) 단계 내지 상기 (e) 단계를 수행하며,
    상기 소정의 전제 조건은, 상기 합산부에서 계산되는 정수합의 크기가 워드 크기를 초과하지 않는 제1 전제 조건과, 상기 메모리부에 저장되는 메모리값의 최대값이 워드 크기를 초과하지 않는 제2 전제 조건과, 상기 메모리부에 저장되는 메모리값의 크기가 일정하게 유지되는 제3 전제 조건을 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  3. 제 2항에 있어서, 상기 (b) 단계에서,
    정수합을 제1, 2, 3 부분 정수합으로 나누어 계산할 때,
    <식 1>
    Σn = (2t1 * as1 + 2t2 * as2 + … + 2tw * asw) + mn-1
    (여기에서, Σn은 정수합, 2ti(1≤i≤w)는 상기 연결 정수부의 연결수 성분 qi을 이진 전개하였을 때 나타나는 2의 거듭제곱, asi는 상기 쉬프트 레지스터부에 저장된 각 레지스터값, mn-1은 상기 쉬프트 레지스터부에 저장된 메모리값, w는 상기 연결 정수부의 연결수 성분 qi를 이진 전개하였을 때 나타나는 해밍 웨이트의 총합을 각각 의미함)
    에 의해 상기 제1, 2, 3 부분 정수합을 계산하여 상기 제1, 2, 3 변수에 각각 저장하는 단계를 더 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  4. 제 3항에 있어서, 상기 (b) 단계에서,
    상기 <식 1>에 의해 모든 1≤ i ≤ w에 대하여 상기 2ti * asi값 중에서 232 보다 크거나 같은 부분의 합을 계산하여 상기 제1 변수에 저장하는 제1 단계;
    상기 <식 1>에서 2의 지수 중에서 최소값을 t라 할 때, 상기 <식 1>에 의해 모든 1≤ i ≤ w에 대하여 2ti-t * asi값의 합과 상기 메모리 변수에서 상기 t비트 보다 상위에 있는 메모리값을 합하여 상기 제2 변수에 저장하는 제2 단계; 및
    상기 메모리 변수에서 상기 t비트 보다 하위에 있는 메모리값을 합하여 상기 제3 변수에 저장하는 제3 단계를 더 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  5. 제 4항에 있어서, 상기 (c) 단계에서,
    상기 제1 부분 정수합에 상기 제2 부분 정수합을 32-t 비트 만큼 이동시킨 값을 더하여 새로운 메모리값으로서 상기 메모리 변수에 저장하는 단계를 더 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  6. 제 1항에 있어서, 상기 (d) 단계에서,
    상기 배열 변수의 새로운 레지스터값을 계산할 때, 상기 제2 부분 정수합을 t비트 만큼 이동시킨 후 상기 제3 부분 정수합과 더하여 상기 배열 변수의 r번째 레지스터값에 저장하는 단계를 더 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  7. (a) 각 레지스터값을 저장하기 위한 배열 변수, 메모리값을 저장하기 위한 메모리 변수, 정수합의 부분값을 저장하기 위한 제1, 2 변수를 워드형으로 선언하는 단계;
    (b) 캐리가 발생하지 않도록 각 초기 레지스터값을 두개로 각각 나누어서 상기 배열 변수에 할당하고 초기 메모리값을 상기 메모리 변수에 할당하는 단계;
    (c) 정수합을 제1, 2 부분 정수합으로 나누어 계산하여 상기 제1, 2 변수에 각각 저장하고, 상기 제1, 2 부분 정수합에 따라 새로운 메모리값을 계산하는 단계;
    (d) 상기 배열 변수에 저장된 레지스터값을 두개씩 이동시켜 제1 출력값을 얻고, 상기 제1, 2 부분 정수합에 따라 상기 배열 변수의 새로운 레지스터값을 계산하는 단계; 및
    (e) 원하는 비트의 출력을 얻을 때까지 상기 레지스터값을 갱신하는 단계를 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  8. 제 7항에 있어서,
    쉬프트 레지스터부, 연결 정수부, 메모리부 및 합산부로 이루어진 캐리를 갖는 피드백 쉬프트 레지스터가 소정의 전제 조건을 만족하는 경우, 상기 (a) 단계 내지 상기 (e) 단계를 수행하며,
    상기 소정의 전제 조건은, 상기 메모리부에 저장되는 메모리값의 최대값이 워드 크기를 초과하지 않는 제1 전제 조건과, 상기 메모리부에 저장되는 메모리값의 크기가 일정하게 유지되는 제2 전제 조건을 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  9. 제 7항에 있어서, 상기 (a) 단계에서,
    상기 각 레지스터값의 개수가 r개인 경우, 2r개의 원소를 갖도록 상기 배열 변수를 선언하는 단계를 더 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  10. 제 9항에 있어서, 상기 (b) 단계에서,
    상기 각 초기 레지스터값을 16비트씩 각각 두개로 나누어서 상기 배열 변수에 각각 16비트씩 나누어 할당하는 단계를 더 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  11. 제 7항에 있어서, 상기 (c) 단계에서,
    상기 제1 부분 정수합을 계산하여 상기 제1 변수의 16비트에 저장하는 제1 단계;
    상기 제2 부분 정수합을 계산하여 상기 제2 변수의 16비트에 저장하는 제2 단계;
    상기 제1 변수에 저장된 제1 부분 정수합을 16비트 이동시켜 상기 메모리 변수의 16비트에 저장하는 제3 단계; 및
    상기 제2 변수에 저장된 제2 부분 정수합을 16비트 이동시켜 상기 메모리 변수의 나머지 16비트에 저장하는 제4 단계를 더 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
  12. 제 9항에 있어서, 상기 (d) 단계에서,
    상기 배열 변수 중에서 두번째 레지스터값을 16비트 이동시킨 후 첫번째 레지스터값과 더하여 상기 제1 출력값을 얻는 단계를 더 포함하는 것을 특징으로 하는 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법.
KR1020080087350A 2008-09-04 2008-09-04 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법 KR100945241B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020080087350A KR100945241B1 (ko) 2008-09-04 2008-09-04 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080087350A KR100945241B1 (ko) 2008-09-04 2008-09-04 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법

Publications (1)

Publication Number Publication Date
KR100945241B1 true KR100945241B1 (ko) 2010-03-03

Family

ID=42182894

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080087350A KR100945241B1 (ko) 2008-09-04 2008-09-04 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법

Country Status (1)

Country Link
KR (1) KR100945241B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115113847A (zh) * 2021-03-19 2022-09-27 西安电子科技大学 基于fcsr级联反馈的伪随机数生成器及生成方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030039913A (ko) * 2001-11-16 2003-05-22 한국전자통신연구원 시프트 레지스터의 소프트웨어 구현 알고리즘

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030039913A (ko) * 2001-11-16 2003-05-22 한국전자통신연구원 시프트 레지스터의 소프트웨어 구현 알고리즘

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
논문1:대한전자공학회

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115113847A (zh) * 2021-03-19 2022-09-27 西安电子科技大学 基于fcsr级联反馈的伪随机数生成器及生成方法

Similar Documents

Publication Publication Date Title
US11169778B2 (en) Converting floating point numbers to reduce the precision
US20170262258A1 (en) Constant Fraction Integer Multiplication
US10534576B2 (en) Optimization apparatus and control method thereof
KR100289513B1 (ko) 파풀레이션 카운트의 계산 장치와 계산 및 누적 장치
EP3769208B1 (en) Stochastic rounding logic
US20190121616A1 (en) Generating randomness in neural networks
CN113168310B (zh) 用于转换数字的硬件模块
US8732227B2 (en) Method and processor unit for implementing a characteristic-2-multiplication
KR100945241B1 (ko) 캐리를 갖는 피드백 쉬프트 레지스터의 소프트웨어 구현 방법
Danysh et al. A recursive fast multiplier
US7908308B2 (en) Carry-select adder structure and method to generate orthogonal signal levels
US6127863A (en) Efficient fractional divider
US6199091B1 (en) Carry skip adder
US5140546A (en) Adder circuit apparatus
US11409500B2 (en) Performing constant modulo arithmetic
US11281428B2 (en) Conversion circuitry
US20110238721A1 (en) Adder circuit and xiu-accumulator circuit using the same
US6735612B1 (en) Carry skip adder
US7225217B2 (en) Low-power Booth-encoded array multiplier
JP3663186B2 (ja) 部分積生成回路および乗算器
Abraham et al. An ASIC design of an optimized multiplication using twin precision
JP2004220377A (ja) リコンフィギュラブル回路とそれを利用可能な集積回路装置およびデータ変換装置
JP4230234B2 (ja) 全加算器用のパリティ予測回路
US6314156B1 (en) Space-efficient multi-cycle barrel shifter circuit
JPH09190338A (ja) 論理演算装置での数学的オーバフロー・フラグ発生遅延の除去

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: 20130207

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140103

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20141224

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20151224

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee