Una estrategia para implementar la resta entre dos números radix-10 sin signo de
p dígitos, consiste en realizar restadores de un dígito BCD (SUB_BCD), para el cuál, a
diferencia de la suma, el acarreo ci+1, significa la petición de una unidad al dígito
siguiente (figura 3.8). Nótese que cuando el minuendo es menor al sustraendo la última instancia del restador solicita un dígito, por consiguiente se genera overflow debido a
que el resultado es negativo.
Figura 3.8 - Restador de números naturales BCD (Sub_Nat), s= x- y.
Se implementó el restador BCD de un dígito mediante la resta binaria de los operandos de entrada y posterior corrección condicional. Cuando se realiza la resta binaria entre dos dígitos BCD, zi= xi- yi, si xies mayor o igual a yi, el resultado no
requiere corrección. Pero si se da el caso que yies mayor a xi, como la unidad solicitada
mediante la resta de 610 (figura 3.9). Nótese que cuando se produce una petición (ci+1 =
1), el resultado zi∈
{
6,7,..,15}
.Figura 3.9 - Restador BCD de un dígito, si= xi- yi.
Para la resta de números naturales BCD con operandos de p dígitos, se propone
utilizar un restador binario de números naturales de 4p bits, seguido de una etapa de
corrección que consiste de restadores binarios de 4 bits. Esto lleva a que la implementación en dispositivos FPGAs sea eficiente, debido a que el restador binario se realiza mediante la utilización de la lógica dedicada que se encuentra en el dispositivo para la suma binaria. La figura 3.10 muestra el restador binario de un bit implementado,
z[j] = x[j]-y[j], donde ps[j] = (x[j]⊕y[j])', se corresponde a la propagación de la petición
de una unidad a la siguiente instancia del restador. Para obtener el resultado z[j], solo se
requiere invertir la salida, nz[j], producida por la compuerta xor.
Figura 3.10 - Restador binario de un bit, z[j] = x[j]-y[j].
Cuando se utiliza la implementación del restador binario propuesto sin el inversor final, entre los operandos de p dígitos BCD, xe y, se obtiene nz= (x- y)'. Donde z = nz',
es el resultado de 4p bits de la resta binaria entre xe y. Considere nz de 4p bits,
nz[4p-1..0] = (nzp-1, nzp-2, nzp-3,.., nz0) (3.17)
es decir nzi = nz[4i+3..4i], coni∈
{
0,1,..,p−1}
. Significa que nzi= (xi-yi)', donde xi e yison dígitos BCD, y además que zi = 15-nzi.
Por todo lo expuesto, para efectuar la resta BCD, s = x-y, basada en el uso de un
restador binario, se debe corregir zi mediante la resta del valor 6 cada vez que se
produce un acarreo, o petición, correspondiente al dígito i (figura 3.9).
Debido a que cuando se produce una petición el resultadozi∈
{
6,7,..,15}
, entonces{
0,1,..,9}
∈
i
nz . Las siguientes son las expresiones booleanas que determinan si en
función de nzi y ci+1 si[0] = nzi[0]' si[1] = (nzi[1]⊕ci+1)' si[2] = ((nzi[2]⊕nzi[1])·ci+1) v (nzi[2]'·ci+1') si[3] = (nzi[3]'·nzi[2]'·nzi[1]'·ci+1) v (nzi[3]'·ci+1') (3.19)
La figura 3.11 muestra la implementación de la instancia i del restador BCD, en
dispositivos FPGAs de Xilinx con LUTs de 6 entradas. Nótese que psi[j] = (xi[j]⊕yi[j])'.
0 1 xi[0] yi[0] 0 1 nzi[0] 0 1 0 1 nzi[1] nzi[2] nzi[3] LUT-6 LUT-6 LUT-6 LUT-6 psi[2] ci ci+1 si[2] xi[1] yi[1] xi[2] yi[2] xi[3] yi[3] psi[1] psi[0] psi[3] LUT-6:2 si[3] LUT-6:2 si[0] si[1]
Figura 3.11 - Implementación de restador de un dígito BCD, si= xi-yi, en dispositivos
con LUTs de 6 entradas.
El tiempo de cálculo estimado para la resta BCD de dos operandos de p dígitos, es
proporcional a p con constante de proporcionalidad 4 veces el tiempo del multiplexor de
acarreo (expresión 3.20). El término independiente, bSub_Nat, involucra dos tiempos de
LUTs, y tiempo de ruteo entre dos slices. Por otro lado, la expresión 3.21 postula la
ocupación de LUTs del restador propuesto
TSub_Nat = 4pTmuxcy + bSub_Nat (3.20)
CSub_Nat = 6p LUTs (3.21)
El restador propuesto, Sub_Nat, solo admite resultados naturales, significa que en
el caso que el sustraendo es mayor al minuendo, y>x, el restador indica que se ha
producido overflow. Muchas veces es deseable evitar el overflow mediante una
corrección y generación de signo. El algoritmo 3.2 detalla la estrategia empleada para efectuar la resta entre números naturales, ss = x-y, con resultado en SVA sin overflow.
En la figura 3.12 se observa el restador de números naturales BCD propuesto, con resultado en SVA sin overflow.
Algoritmo 3.2 - Resta BCD con resultado en SVA
s = x-y; // resta de números naturales propuesta if (y>x) then
ss = 0-s; // resta de números naturales propuesta else ss = s; end if; SUB_NAT y ovf x sign 0 1 SUB_NAT 0 1 0 s ss
Figura 3.12 - Restador de números naturales BCD con resultado en SVA sin overflow
(Sub_S), ss= x- y.
Para el módulo Sub_Nat encargado de realizar la operaciones 0-s ó s-0, se puede
modificar el restador binario de modo que contenga los multiplexores que determinan la operación a realizar. Para ello, se realizan cambios en las funciones de propagación,
pps, y generación, gss, de la petición de un dígito binario. Considérese pss y gss de 4p
bits
pss[4p-1..0] = (pssp-1, pssp-2, pssp-3, …, pss0) y
gss[4p-1..0] = (gssp-1, gssp-2, gssp-3, …, gss0) (3.22)
es decir pssi = pss[4i+3..4i] y gssi = gss[4i+3..4i], con i∈
{
0,1,..,p−1}
.Una instancia del restador binario propaga la petición de dígito binario proveniente de la instancia anterior, cuando s[j]=0. Esto se debe que se realiza 0-0,
independientemente si el primer restador Sub_Nat genere o no genere overflow. Para el
caso que s[j]=1, si la operación a realizar es 0-1 se genera una petición, de lo contrario
si se efectúa 1-0 se "mata" la petición. Esto lleva que no se propague la petición de la instancia anterior cuando s[j] es igual a 1. De este modo, la función de petición de dígito
binario del segundo restador Sub_Nat es la siguiente
pssi[j]= pssi[4i+j]=si[j]', con i∈
{
0,1,..,p−1}
y j∈{
0,1,2,3}
(3.23)En cuanto a la generación de petición de dígito binario entre dos instancias del restador, en el caso que el primer restador (Sub_Nat) produce overflow, cp=1, se genera
petición si s[j]=1. Por otro lado, en el caso que cp = 0, ninguna instancia del restador
binario genera petición. Por consiguiente, la función de generación de petición de dígito binario del segundo módulo restador se postula de la siguiente manera
gssi[j]= gssi[4i+j]=si[j]·cp, con i∈
{
0,1,..,p−1}
y j∈{
0,1,2,3}
(3.24)La petición de dígito binario, cci+1, correspondiente al i-ésimo restador binario de
4 bits se determina utilizando la lógica de propagación de acarreo presente en los dispositivos FPGAs (figura 3.13). En el caso que cp=1, se obtiene nzz= (0-s)'; caso
contrario, si cp=0 se obtiene nzz= s'. En consecuencia, para el resultado final ss, se
realiza lo siguiente
if ci+1=1 then ssi = 9-nzzi else ssi = nzzi' (3.25)
Para reducir tiempo de cómputo y la ocupación de LUTs de la implementación de Sub_S, se combina la fase de corrección del primer restador, con la etapa de resta
binaria del segundo restador. Significa que las funciones de propagación y generación de petición de dígito binario en el segundo restador, pssi[j] y gssi[j] respectivamente, se
realizan a partir de nzi en vez de si, de este modo se evita la fase de corrección del
primer restador.
Cada par de funciones pssi[j] y gssi[j], se puede implementar con una sola
LUT6:2. La figura 3.13 muestra la implementación de la instancia i del restador BCD
con resultado en SVA sin overflow, en dispositivos FPGAs de Xilinx con LUTs de 6
entradas. 0 1 0 1 nzzi[0] 0 1 0 1 nzzi[1] nzzi[2] nzzi[3] LUT-6:2 LUT-6:2 LUT-6:2 LUT-6:2 pssi[2] cci cci+1 ssi[2] pssi[1] pssi[0] pssi[3] LUT-6:2 ssi[3] LUT-6:2 ssi[0] ssi[1] gssi[3] gssi[2] gssi[1] gssi[0] 0 1 xi[0] yi[0] 0 1 nzi[0] 0 1 0 1 nzi[1] nzi[2] nzi[3] LUT-6 LUT-6 LUT-6 LUT-6 psi[2] ci ci+1 xi[1] yi[1] xi[2] yi[2] xi[3] yi[3] psi[1] psi[0] psi[3] cp
Figura 3.13 - Implementación de restador de un dígito BCD con resultado en SVA sin
overflow, ssi= xi- yi, en dispositivos con LUTs de 6 entradas.
Las expresiones 3.26 y 3.27, detallan el tiempo de cómputo estimado y ocupación de LUTs respectivamente, correspondientes a la implementación del restador BCD, Sub- S, entre dos operandos de p dígitos. El término independiente bSub_S, contiene tres
tiempos de LUTs y tiempo de ruteo entre tres slices.
TSub_S = 8pTmuxcy + bSub_S (3.26)
3.4.1. Resultados experimentales
Las tablas 3.5 y 3.6, detallan los resultados obtenidos en la síntesis de los restadores BCD con operandos de p dígitos propuestos en este trabajo, en dispositivos
de Xilinx Virtex 7 con speed grade 3.
Tabla 3.5. Tiempo de cálculo (ns) en Virtex 7 con speed grade 3
p Sub_Nat Sub_S
7 2.02 3.43
16 2.46 4.33 34 3.36 6.14
Tabla 3.6. Área (LUTs ) en Virtex 7 con speed grade 3
p Sub_Nat Sub_S
7 42 70
16 96 160
34 204 340