caso de estudio: inversión...
Post on 27-Apr-2020
9 Views
Preview:
TRANSCRIPT
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
top related