Buenas de nuevo, gracias por vuestros comentarios Joaquim, Charli y Zupay!
Como dije en el post anterior, si tenemos resuelto el log2, conseguir los demás tipo de logaritmo (en base 10 y natural) es muy sencillo, sólo hay que multiplicar por una constante.
Para log10 sería así: log10 = log2 x 0.30102999566
y
para ln sería así: ln = log2 x 0.69314718056
Dentro del circuito está todo explicado y comento de dónde viene cada cosa. Para mí la parte más compleja a sido traducir esa multiplicación a formato punto fijo porque hasta el momento no tenía experiencia de este tipo.
La parte entera del logaritmo (natural y en base 10) las he resuelto en todo los casos con un encoder especial para cada tipo de logaritmo, en el que según la entrada, da un entero muy concreto.
La parte fraccionaria es donde tuve que experimentar de muchas formas hasta dar con la solución, pese a que de antemano ya tenía unas pistas. Para el formato punto fijo, esas constantes (las que comenté arriba) se han de multiplicar por 65536 (porque es formato Qn.16) y como es una multiplicación que da un resultado en 32 bits, para la mantisa hay que tomar sólo los 16 bits más altos y el resto descartarlo.
Los circuitos consumen bastantes recursos, con cada multiplicación de 32 bits aumenta notablemente. Intentando optimizar lo máximo posible usé un truco que aprendí de Joaquim. Se trata de tomar la constante que quieres multiplicar y verla en binario, entonces usas las potencias de cada "1" que encontramos. De esta manera se multiplica siempre con bases de 2. Con este procedimiento conseguí ahorrar unos 100 "LC".
En Ln y log10, al resultado de la multiplicación de 32 bits le sumo una constante. Esto me ayudó a ajustar la exactitud en 4 decimales, con un error máximo de -1 para el dígito decimal menos significativo. La mayoría de las veces el resultado, o bien es exacto, o bien redondea al alza el dígito menos significativo. Este pequeño ajuste es debido a que en las conversiones se pierden decimales pero si se le suma una constante resuelve de forma sobresaliente esas pérdidas.
Para terminar comentar que nada de esto hubiera sido posible si no hubiera encontrado una web alucinante (en realidad, sólo para quien sepa apreciar el valor que tiene) donde explica varios algoritmos transcendentes, entre ellos el logaritmo en base 2 y conversiones de éste. Mis más sincero agradecimiento para Tracy Allen. Utiliza un lenguaje de programación (muy muy antiguo) llamado "PBasic" que se usan o usaban en las "Basic Stamp". Yo no tengo idea de ese lenguaje (sí con lo común a cualquier otro lenguaje de programación), pero buscando en los manuales de instrucciones (PDF) pude entender ciertas instrucciones, aparte de que en la propia página también las explica, pero necesitaba ver ejemplos de usos.
Saludos.