Caso de Estudio: Inversión...

Post on 27-Apr-2020

9 views 0 download

Transcript of Caso de Estudio: Inversión...

1Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Caso de Estudio: Inversión modular

Arturo Díaz-PérezDepartamento de Computación

Laboratorio de Tecnologías de InformaciónCINVESTAV-IPN

2Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Importancia

La inversión modular es esencial en la criptografía de llave pública.

Es una operación básica en la criptografía de curvas elípticas (ECC).

ECC se encuentra definida frecuentemente sobre los campos finitos GF(p) y GF(2m).

Dados a y p, (a ∈ [0,p-1]), el problema es hallar a-1 ∈ [0,p-1], tal que, a a-1 mod p = 1

3Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Inverso Modular de Montgomery

Inverso Modular de Montgomery:MonInv(a2m, p) = a–12m (mod p)r = AlmMonInv( a2m, p) = a–12k–m (mod p) x = MonInv( r, p, k) = a–12m (mod p)

Modificación:ModInv(a, p) = a–1 (mod p)r = AlmMonInv( a, p ) = a–12k (mod p) x = ModInv( r, p, k ) = a–1 (mod p)

4Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Algoritmo: Fase 1Fase I: Almost Montgomery Inverse

AlmMonInv (a, p)Entrada: a ∈ [1, p – 1] y pSalida: r y k, donde r = a–1 2k (mod p) y m ≤ k ≤ 2m

u := p, v := a, r := 0, s := 1, k := 0while ( v > 0) do begin

if u is even then u := u/2, s := 2selse if v is even then v := v/2, r := 2relse if u > v then

u := (u – v)/2, r := r + s, s := 2selse

v := (v – u)/2, s := s + r, r := 2rk := k + 1

endif r ≥ p then r := r – p r := p – rreturn r, k

5Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Algoritmo: Fase 2Fase II: Real Modular Inverse

ModInv (r, p, k)Entrada: r, p y k Salida: x, donde x = a–1 (mod p)

for i = 1 to k doif r is even then

r := r/2else

r := (r + p)/2x := rreturn x

6Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

int AlmMontInv1( unsigned int a, unsigned int p, unsigned int *ro, unsigned int *ko ){

unsigned int u, v, r, s, k;

u = p; v = a; r = 0; s = 1; k = 0;

while( v > 0 ) {if( !(u & 01) ) {u = u >> 1;s = s << 1;

} else if( !(v & 01) ) {v = v >> 1;r = r << 1;

} else if( u > v ) {u = (u-v) >> 1;r = r + s;s = s << 1;

} else { /* v >= u ) */v = (v-u) >> 1;s = s + r;r = r << 1;

}k++;

}if( r >= p ) r = r - p;

r = p - r;*ro = r; *ko = k;

}

7Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

unsigned int ModInv( unsigned int r, unsigned int p, unsigned int k ){

unsigned int i;

for( i = 1; i <= k; i++ ) {if( !( r & 01) )

r = r >> 1;elser = (r+p) >> 1;

}

return r;}

8Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Montgomery 1while( v > 0 ) {

if( (u & 0x07) == 0x00 ) {u = u >> 3;s = s << 3;k = k + 3;

} else if( (u & 0x07) == 0x04 ) {u = u >> 2;s = s << 2;k = k + 2;

} else if( (u & 0x03) == 0x02 ) {u = u >> 1;s = s << 1;k = k + 1;

} else if( (v & 0x07) == 0x00 ) {v = v >> 3;r = r << 3;k = k + 3;

} else if( (v & 0x07) == 0x04 ) {v = v >> 2;r = r << 2;k = k + 2;

} else if( (v & 0x03) == 0x02 ) {v = v >> 1;r = r << 1;k = k + 1;

}. . .

}...

9Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Montgomery 1 (Cont.)

while( v > 0 ) {. . . } else if( u > v ) {

u = (u-v) >> 1;r = r + s;s = s << 1;k = k + 1;

} else { /* v >= u ) */v = (v-u) >> 1;s = s + r;r = r << 1;k = k + 1;

}}if( r >= p ) r = r - p;

r = p - r;*ro = r; *ko = k;

10Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Montgomery 2 (Modificación)while( v > 0 ) {. . .} else {x = u - v;y = v - u;z = r + s;if( u > v ) {u = x >> 1;r = z;s = s << 1;

} else { /* v >= u ) */v = y >> 1;s = z;r = r << 1;

}k = k + 1;

}}x = p - r;y = 2*p - r;if( p >= r ) r = x;

elser = y;

*ro = r; *ko = k;

11Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

AlmMonInv: Fase 1Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1; } goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 7 6. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if( v ≠ 0 ) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

12Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

ModInv: Fase 2

Registros: i, x;Entrada: r, p, k;Salida: x = a-1 mod p;1. x = r; i = 0; 2. if(i = k) then goto 7;3. if(x0 = 0) then { x = ShiftR(u, 1);} goto 54. z = Add(r, p); x = ShiftR( z, 1 );5. i = i+1; 6. goto 27. result = x;

13Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Port Map: Fase I

LOADA

DATAIN

LOADP

n

G RST

RESULTn

DATARDY

Km

CLK

14Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

IDLEIDLE

G

u ← p; v ←a;r ← 0; s ←1;x ← 0; y ←0;z ← 0; k ←0;DataRdy ←0;

0 1

DIVU

Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0;2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

FROM FINAL

15Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

DIVURegistros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

DIVU

u2u1u0=000

u ← ShiftR(u,3);s ← ShiftL(s,3);

k ← k + 3

1 0

u2u1u0=100

u ← ShiftR(u,2);s ← ShiftL(s,2);

k ← k + 2

0

u2u1u0=x10

u ← ShiftR(u,1);s ← ShiftL(s,1);

k ← k + 1

1

1

DIVU1

DIVU2

0

DIVV

16Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

DIVVRegistros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

DIVV

v≠0 &v2v1v0=000

v ← ShiftR(v,3);r ← ShiftL(r,3);

k ← k + 3

01

v2v1v0=100

v ← ShiftR(v,2);r ← ShiftL(r,2);

k ← k + 2

0

v2v1v0=x10

v ← ShiftR(v,1);r ← ShiftL(r,1);

k ← k + 1

1

1

SUB

0

DIVV2

DIVV1

17Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

SUB

x ← Subtract(u,v);y ← Subtract(v,u);

z ← Addr(r,s);

SUB

xborrow

u ← ShiftR(x,1);r ← z;

s ← ShiftL(s,1);

10

v ← ShiftR(y,1);s ← z;

r ← ShiftL(r,1);

ADD-K

Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 7 3. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

18Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

ADD-K

k ← k+1;

ADD-K

v≠001

SUBFDIVU

Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1;} goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1;} goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

19Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

SUBF

x ← Subtract(p,r);y ← Subtract(2p,r);

SUBF

xborrow

Result ← x;

10

Result ←y;

FINAL

Registros: u, v, r, s, x, y, z, p;Entrada: a, p;Salida: result, k;1. u = p; v = a; r = 0; s = 1; x = 0; y = 0; z = 0; k = 0; 2. if(u2u1u0 = 000) then { u = ShiftR(u, 3); s = ShiftL(s, 3); k = k+3;} goto 8 2.1. if(u2u1u0 = 100) then { u = ShiftR(u, 2); s = ShiftL(s, 2); k = k+2;} goto 82.2. if(u2u1u0 = x10) then { u = ShiftR(u, 1); s = ShiftL(s, 1); k = k+1; } goto 83. if(v2v1v0 = 000) then { v = ShiftR(v, 3); r = ShiftL(r, 3); k = k+3;} goto 83.1. if(v2v1v0 = 100) then { v = ShiftR(v, 2); r = ShiftL(r, 2); k = k+2;} goto 83.2. if(v2v1v0 = x10) then { v = ShiftR(v,1); r = ShiftL(r,1); k = k+1; } goto 84. x = Substract(u, v); y = Substract(v, u); z = Add(r, s); 5. if(xborrow = 0) then { u = ShiftR(x, 1); r = z; s = ShiftL(s, 1); } goto 76. s = z; v = ShiftR(y, 1); r = ShiftL(r, 1);7. k = k+1; 8. if(v ≠ 0) goto 29. x = Substract(p, r); y = Substract(2p, r);10. if(xborrow = 0) then {result = x;} else {result = y}

20Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

FINAL

FINAL

DataReady ← 1;

RST0 1

IDLE

21Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers u and v

REGISTER MicroOperation Control SignalName

Control Expression

Register v v ← av ← ShiftR(v,3)v ← ShiftR(v,2)v ← ShiftR(v,1)v ← ShiftR(y,1)

LOADAShiftRV3ShiftRV2ShiftRV1ShiftRV-Y

IDLE•GDIVV•(v≠0&v2v1v0 = 000)DIVV1•(v2v1v0 = 100)DIVV2•(v2v1v0 = 110)SUB•(xborrow)

Register u u ← pu ← ShiftR(u,3)u ← ShiftR(u,2)u ← ShiftR(u,1)u ← ShiftR(x,1)

LOADPShiftRU3ShiftRU2ShiftRU1ShiftRU-X

IDLE•GDIVU•(u≠0&u2u1u0 = 000)DIVU1•(u2u1u0 = 100)DIVU2•(u2u1u0 = 110)SUB•(xborrow)’

22Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register u

Reg. u

ShiftR3

ShiftR2

ShiftR1

x

p

ShiftR1

ShiftRU2

ShiftRU1

ShiftRU-X

LOADP

ShiftRU3

23Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register v

Reg. v

ShiftR3

ShiftR2

ShiftR1

y

a

ShiftR1

ShiftRV2

ShiftRV1

ShiftRV-Y

LOADA

ShiftRV3

24Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers s and r

REGISTER MicroOperation Control SignalName

Control Expression

Register r r ← 0r ← ShiftL(r,3)r ← ShiftL(r,2)r ← ShiftL(r,1)r ← zr ← ShiftL(r,1)

InitShiftRV3ShiftRV2ShiftRV1ShiftRV-Y’ShiftRV-Y

IDLE•GDIVV•(v≠0&v2v1v0 = 000)DIVV1•(v2v1v0 = 100)DIVV2•(v2v1v0 = 110)SUB•(xborrow)’SUB•(xborrow)’

Register s s ← 1s ← ShiftL(s,3)s ← ShiftL(s,2)s ← ShiftL(s,1)s ← zs ← ShiftL(s,1)

InitShiftRU3ShiftRU2ShiftRU1ShiftRU-X’ShiftRU-X

IDLE•GDIVU•(u≠0&u2u1u0 = 000)DIVU1•(u2u1u0 = 100)DIVU2•(u2u1u0 = 110)SUB•(xborrow)SUB•(xborrow)’

25Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register s

Reg. s

ShiftL3

ShiftL2

ShiftL1

1

z

ShiftRU2

ShiftRU1 or ShiftRU-X

ShiftRU-X’

Init

ShiftRU3

26Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register r

Reg. s

ShiftL3

ShiftL2

ShiftL1

0

z

ShiftRV2

ShiftRV1 or ShiftRV-Y

ShiftRV-Y’

Init

ShiftRV3

27Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Register k

REGISTER MicroOperation Control SignalName

Control Expression

Register k k ← 0k ← k+3k ← k+2k ← k+1

InitShiftRV3ShiftRV2ShiftRV1

IDLE•GDIVV•(v≠0&v2v1v0 = 000)DIVV1•(v2v1v0 = 100)DIVV2•(v2v1v0 = 110)

Register k k ← k+1 AddK ADD-K

Register k k ← 0k ← k+3k ← k+2k ← k+1

InitShiftRU3ShiftRU2ShiftRU1

IDLE•GDIVU•(u≠0&u2u1u0 = 000)DIVU1•(u2u1u0 = 100)DIVU2•(u2u1u0 = 110)

28Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register k

Reg. k

Add1

Add2

Add3

0

Init or AddK

ShiftRU3 or ShiftRV3

ShiftRU2 or ShiftRV2

ShiftRU1 or ShiftRV1

29Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register k Modificado

Reg. k

Add

0

ShiftRU1 or ShiftRV1

Init or AddKShiftRU2 or ShiftRV2

ShiftRU3 or ShiftRV3

123

ShiftRU3 or ShiftRV3or

ShiftRU2 or ShiftRV2or

ShiftRU1 or ShiftRV1

30Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers x, y, z

REGISTER MicroOperation Control SignalName

Control Expression

Register y y ← 0y ← Substract(v,u)y ← Substract(2p,r)

InitSubSubF

IDLE•GSUBSUBF

Register z z ← 0z ← Addr(r, s)

InitSub

IDLE•GSUB

Register x x ← 0x ← Substract(u.v)x ← Substract(p,r)

InitSubSubF

IDLE•GSUBSUBF

31Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register x

Reg. x

Sub

Sub

p

r

u

0

Sub

Init

v

xborrow

SubF

32Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register x Modificado

Reg. x

Sub

0

SubF or Sub

Init

u

v

p

r

xborrowandSub

SubF

Sub

SubF

Sub

33Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register y

Reg. y

Sub

Sub

0

SubF

Sub

Init

v

u

ShiftR2p

r

34Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register y Modificado

Reg. y

Sub

0

SubF or Sub

Init

v

u

p

rSubF

Sub

SubF

Sub

ShiftR2

35Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register z

Reg. z

Add

r

0

Sub

Init

s

36Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers DataRdy & Result

REGISTER MicroOperation Control SignalName

Control Expression

Register Result Result ← 0Result ← xResult ← y

InitResXResY

IDLE•GSUBF•(xborrow)’SUBF•(xborrow)

Register DataRdy DataRdy ← 0DataRdy ← 1

InitDataReady

IDLE•GFINAL

37Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: DataRdy & Result

0 0

1

Sub

Init

DataRdy

y

ResX

Init

Resultx

n

n

n

n

ResY

38Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Diagrama de Estados

UZ u = 0

DIVU8 u2u1u0 = 000

DIVU4 u2u1u0 = 100

DIVU2 u2u1u0 = x10

VZ v = 0

DIVV8 v2v1v0 = 000

DIVV4 v2v1v0 = 100

DIVV2 v2v1v0 = x10

T0

G=0

T1

DIVV2

T2

DIVV1 DIVV

IDLE DIVU DIVU1 DIVU2

SUB

ADD-K SUBF FINAL

G=1DIVU8

DIVU8’ DIVU4’

DIVU4

VZ’ and DIVV8

VZ or DIVV8’

DIVV4’

DIVV4

VZVZ’ RST=0

RST=1

T3

T4

T5T6T7

T8 T9T10

39Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath+Control

InitShiftRU3ShiftRU2ShiftRU1

ShiftRU-XShiftRV3ShiftRV2ShiftRV1

ShiftRV-YAddK

SubSubFResXResY

DataReady

T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10

UZVZDIVU8DIVU4DIVU2DIVV8DIVV4DIVV2

GRSTCLK

xborrow

Datapath Control Unit

State

Control Signals

LOADA

DATAIN

LOADP

n

CLK

G

RST

11

15RESULT

DATARDYK

nn

40Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Port Map: Fase II

P

R

K

n

CE RST

RESULTn

DATARDY

n

n

CLK

41Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

IDLE-2IDLE-2

CE

x ← r; i ← 0;z ← 0;

DataRdy ←0;

1 0

LOOP1

Registros: i, x;Entrada: r, p, k;Salida: x = a-1 mod p;1. x = r; i = 0; 2. if(i = k) then goto 5;3. if(x0 = 0) then { x = ShiftR(x, 1);} goto 54. z = Add(r, p); x = ShiftR( z, 1 );5. i = i+1; 6. goto 27. result = x;

FROM FINAL2

42Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

LOOP1, LOOP2, INC-ILOOP1

i == k01

x0=0

x ← ShiftR(x,1);

1 0

z ← Add(r,p);x ← ShiftR(z,1);

INC-I

LOOP2

Registros: i, x;Entrada: r, p, k;Salida: x = a-1 mod p;1. x = r; i = 0;2. if(i = k) then goto 5;3. if(x0 = 0) then { x = ShiftR(x, 1);} goto 54. z = Add(r, p); x = ShiftR( z, 1 );5. i = i+1; 6. goto 27. result = x;

FINAL2

i ← i+1;

43Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

FINAL2

FINAL2

Result ← x;DataReady ← 1;

RST0 1

Registros: i, x;Entrada: r, p, k;Salida: x = a-1 mod p;1. x = r; i = 0;2. if(i = k) then goto 5;3. if(x0 = 0) then { x = ShiftR( x, 1 );} goto 54. z = Add(r, p); x = ShiftR( z, 1 );5. i = i+1; 6. goto 27. result = x;

IDLE-2

44Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Registers x, i, z, DataRdy, Result

REGISTER MicroOperation Control SignalName

Control Expression

Register i i ← 0i ← i+1

InitIncI

IDLE2•CE’INC-I

Register z z ← 0z ← Add(r, p)

InitAddR&P

IDLE2•CE’LOOP2 •(x0=0)

DataRdy DataRdy ← 0DataRdy ← 1

InitDataReady

IDLE2•CE’FINAL2

Result Result ← x DataReady FINAL2

Register x x ← rx ← ShiftR(x, 1)x ← ShiftR(z, 1)

InitShiftRx1ShiftRz1

IDLE2•CE’LOOP2 •(x0=1)LOOP2 •(x0=0)

45Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register i

Reg. i

ADD

0

IncI

Init

1

x0

46Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register z

Reg. z

ADD

r

0

AddR&P

Init

p

x0

47Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Datapath: Register x

Reg. x

ShiftRx1

ShiftRz1

r

ShiftRx1

ShiftRz1

Init

zx0

48Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Diagrama de Estados

CE=1

CMPIK i == k

XPAR x0 = 0

S0 S1

FINAL2

S2IDLE2 LOOP1 LOOP2 INC-I

CE=0

S3

CMPIK’

CMPIK

S4

RST=0

49Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Fase 2: Unidad de Control

InitShiftRx1ShiftRz1

IncIAddR&P

DataReady

S0 S1 S2 S3 S4

CMPIKXPAR

CERSTCLK

Datapath Control

State

Control Signals

RESULT

DATARDYK

P

CE

AINV

50Aritmética Computacional 2007 Caso de Estudio: Inverso Modular

Diseño Circuito

Fase 1 Fase 2

Datapah Control

LOADA

DATAIN

LOADP

G

RST

ROUT

POUT

KOUT

AINV

DATARDYRIN

PIN

KIN Datapah Control

RDY CE