Sabemos que para convertir sin signo a con signo (precisamente, quiero convertir un número binario puro en CA2) debemos negar el número sin signo añadiendo, entonces, + 1. En VHDL puedo implementar un inversor y un sumador que gestione el carry in. Tengo dos números de 32 bits. ¿Hay otra forma de implementar la suma + 1 utilizando algo más barato? ¿Existe una solución para gestionar el carry in utilizando sólo puertas lógicas?
Respuestas
¿Demasiados anuncios?Realmente no vale la pena preocuparse demasiado por este detalle. Sumar 1 a un número es un lenguaje tan común en HDL que las herramientas de síntesis tienen métodos muy evolucionados para tratar con él. Además, la mayoría de las FPGAs modernas tienen una lógica de acarreo rápido dedicada, que no consume celdas lógicas, y que las herramientas de síntesis saben aprovechar.
Si es sin signo, es por definición positivo, por lo que su complemento a 2 también es positivo, por lo que la representación del patrón de bits es la misma.
La única dificultad surge si su MSB ya está establecido: entonces es un sin signo demasiado grande para representarlo como un número con signo del mismo tamaño. Por lo tanto, la respuesta completamente general es extenderlo con signo a un número de complemento a 2 que sea al menos 1 bit más ancho:
my_signed <= '0' & my_unsigned;