Hyperbolic Tangent HDL Optimized
Calcular la tangente hiperbólica basada en CORDIC y generar código HDL optimizado
Desde R2020a
Bibliotecas:
Fixed-Point Designer HDL Support /
Math Operations
Descripción
El bloque Hyperbolic Tangent HDL Optimized devuelve la tangente hiperbólica de x, calculada usando una implementación basada en CORDIC y optimizada para la generación de código HDL.
Ejemplos
Implement Hardware-Efficient Hyperbolic Tangent
Implement a hardware-efficient hyperbolic tangent.
Puertos
Entrada
x — Ángulo en radianes
escalar finito real
Ángulo en radianes, especificado como escalar finito real. Si x es un tipo de datos de punto fijo o doble escalado, x debe usar el escalado de punto binario. No se admite la representación de pendiente y sesgo para tipos de datos de punto fijo.
Tipos de datos: single
| double
| fixed point
validIn — Indica si la entrada es válida
escalar Boolean
Si la entrada es válida, se especifica como un escalar booleano. Esta señal de control indica cuándo los datos del puerto de entrada x son válidos. Cuando este valor es 1
(true
), el bloque captura el valor en el puerto de entrada x. Cuando este valor es 0
(false
), el bloque ignora las muestras de entrada.
Tipos de datos: Boolean
Salida
y — Tangente hiperbólica de x
escalar
Tangente hiperbólica del valor en x, devuelta como escalar. El valor de y es la aproximación basada en CORDIC de la tangente hiperbólica de x. Cuando la entrada a la función es de punto flotante, el tipo de datos de salida es el mismo que el tipo de datos de entrada. Cuando la entrada es un tipo de datos de punto fijo, la salida tiene la misma longitud de palabra que la entrada y una longitud de fracción igual a 2 menos que la longitud de palabra.
Tipos de datos: single
| double
| fixed point
validOut — Indica si los datos de salida son válidos
escalar Boolean
Si los datos de salida son válidos, se devuelven como un escalar booleano. Cuando el valor de esta señal de control es 1
(true
), el bloque ha calculado correctamente la salida y. Cuando este valor es 0
(false
), los datos de salida no son válidos.
Tipos de datos: Boolean
ready — Indica si el bloque está listo
escalar Boolean
Si el bloque está listo, se devuelve como un escalar booleano. Esta señal de control indica cuándo el bloque está listo para nuevos datos de entrada. Cuando este valor es 1 (true
) y el valor de validIn es 1 (true
), el bloque acepta datos de entrada en la siguiente unidad de tiempo. Cuando este valor es 0 (false
), el bloque ignora datos de entrada en la siguiente unidad de tiempo.
Tipos de datos: Boolean
Más acerca de
Algoritmos
CORDIC
CORDIC es el acrónimo de COordinate Rotation DIgital Computer (calculador digital de rotación de coordenadas). El algoritmo CORDIC basado en rotación de Givens es uno de los algoritmos más eficientes en términos de hardware porque solo requiere operaciones iterativas de desplazamiento y suma (consulte Referencias). El algoritmo CORDIC evita el uso de multiplicadores explícitos.
El bloque determina automáticamente el número de iteraciones, niters
, que el algoritmo CORDIC realiza en función del tipo de datos de la entrada.
Tipo de datos de la entrada x | niters |
---|---|
simple | 23 |
doble | 52 |
punto fijo | Uno menos que la longitud de palabra de x. El número mínimo de iteraciones de CORDIC es 7 . |
Cálculos de punto fijo eficientes en términos de hardware
El bloque Hyperbolic Tangent HDL Optimized admite la generación de código HDL para datos de punto fijo con escalado de punto binario. Está diseñado para este uso y emplea optimizaciones y semántica específicas del hardware. Una de estas optimizaciones es el uso compartido de recursos.
Cuando se implementan algoritmos complejos en dispositivos FPGA o ASIC, a menudo existe un equilibrio entre el uso de recursos y la tasa de transferencia total para un cálculo determinado. Los algoritmos totalmente canalizados y paralelizados tienen la mayor tasa de transferencia, pero a menudo requieren demasiados recursos para implementarlos en dispositivos reales. Cuando se implementa una lógica de planificación en torno a uno o varios circuitos computacionales centrales, es posible reutilizar recursos durante un cálculo. El resultado es una implementación con un uso de memoria mucho menor, a costa de una tasa de transferencia total reducida. Es una alternativa aceptable, ya que los diseños de recursos compartidos aún pueden cumplir con los requisitos generales de latencia.
Todas las unidades computacionales clave del bloque Hyperbolic Tangent HDL Optimized se reutilizan durante todo el ciclo de vida computacional. Esto incluye tanto los circuitos CORDIC usados para realizar las rotaciones de Givens, como los sumadores y multiplicadores usados para actualizar los ángulos. Esto ahorra recursos tanto de DSP como de estructura al implementar en dispositivos FPGA o ASIC.
Cómo interactuar con el bloque Hyperbolic Tangent HDL Optimized
El bloque Hyperbolic Tangent HDL Optimized acepta datos cuando la salida ready está en un nivel alto, lo que indica que el bloque está listo para comenzar un nuevo cálculo. Para enviar datos de entrada al bloque, la señal validIn debe ser activada. Si el bloque registra correctamente el valor de entrada, desactivará la señal ready y el usuario deberá esperar hasta que la señal se active nuevamente para enviar una nueva entrada. Este protocolo se resume en el siguiente diagrama de ondas. Observe cómo la primera entrada válida al bloque se descarta porque el bloque no estaba listo para aceptar datos de entrada.
Cuando el bloque haya terminado el cálculo y esté listo para enviar la salida, se activará validOut durante un ciclo de reloj. Luego, se activará ready, lo que indica que el bloque está listo para aceptar un nuevo valor de entrada.
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante Simulink® Coder™.
No se admite la representación de pendiente y sesgo para tipos de datos de punto fijo.
Generación de código HDL
Genere código VHDL, Verilog y SystemVerilog para diseños FPGA y ASIC mediante HDL Coder™.
HDL Coder™ proporciona opciones de configuración adicionales que afectan a la implementación de HDL y la lógica sintetizada.
Este bloque tiene una arquitectura de HDL predeterminada.
General | |
---|---|
ConstrainedOutputPipeline | Número de registros para colocar en las salidas moviendo los retrasos existentes dentro de su diseño. La canalización distribuida no redistribuye estos registros. El valor predeterminado es |
InputPipeline | Número de fases de canalización de entrada que desea insertar en el código generado. La canalización distribuida y la canalización de salida restringida pueden mover estos registros. El valor predeterminado es |
OutputPipeline | Número de fases de canalización de salida para insertar en el código generado. La canalización distribuida y la canalización de salida restringida pueden mover estos registros. El valor predeterminado es |
Solo se admiten tipos de datos de punto fijo.
Historial de versiones
Introducido en R2020a
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)