

Un procesador de señal digital (DSP) es un tipo de microprocesador (increíblemente rápido y poderoso). Un DSP es único porque realiza el procesamiento de datos en tiempo real. Esta capacidad de operación en tiempo real hace de un DSP la opción perfecta para aplicaciones en las que no vamos a tolerar retrasos.
Básicamente un DSP adquiere una señal digital y la procesa para mejorar la misma. La mejora puede ser un sonido más claro, imagen más nítida o datos más rápidos.
Aunque hay muchos procesadores DSP, la mayoría son diseñados con las mismas operaciones básicas en mente, por lo que comparten el mismo conjunto de características básicas. Estas características se dividen en tres categorías:
Un DSP para operar requiere unas simples funciones típicas:
Para realizar la aritmética simple requerida los procesadores DSP necesitan unidades aritméticas de alta velocidad. La mayoría de las operaciones requieren sumas y multiplicaciones juntas, por lo cual, existe hardware para suma y multiplicación que pueden usarse en paralelo con una sola instrucción.
Los retrasos (delays) requieren que los valores intermedios sean mantenidos para su uso posterior. Esto también puede ser un requisito, por ejemplo, para un valor total que se actualiza, el total puede ser mantenido en el procesador para evitar lecturas y escrituras masivas en la memoria. Por esta razon los DSPs tienen muchos registros que pueden utilizarse para mantener los valores intermedios.
El manejo de arreglos requiere que los datos sean eficientemente adquiridos desde posiciones de memoria consecutivas. Esto implica la generación de la próxima direccion de memoria. Por esta razon existen registros especiales que se usan para mantener las direcciones de memoria y generar la siguiente rápidamente.
ENTRADA
Las entradas están formadas por buffers de doble salida:
ARRAY DE PUERTAS AND Y OR
En el array de puertas AND y en el de puertas OR, también se utiliza la notación abreviada.
Son dispositivos con memoria mas comúnmente utilizados. Sus características principales son:
Asíncronos: Sólo tienen entradas de control. El mas empleado es el flip flop RS.
Síncronos: Ademas de las entradas de control necesita un entrada sincronismo o de reloj.
Una vez teniendo una idea de lo que es un flip flop vamos a describir los flip flop mas usados.
Utiliza dos compuertas NOR. S y R son las entradas, mientras que Q y Q’ son las salidas (Q es generalmente la salida que se busca manipular.)
La conexión cruzada de la salida de cada compuerta a la entrada de la otra construye el lazo de reglamentación  imprescindible en todo dispositivo de memoria.
El flip-flop D es uno de los FF más sencillos. Su función es dejar pasar lo que entra por D, a la salida Q, después de un pulso del reloj.
Cuando se están utilizando flip-flops en la construcción de circuitos, es necesario poder controlar el momento en el que un FF empieza a funcionar y el valor con el que inicia su secuencia. Para esto, los flip-flops cuentan con dos entradas que le permiten al diseñador seleccionar los valores iniciales del FF y el momento en el que empieza a funcionar.
El latch S-R con entrada de habilitación
En un latch con entrada de habilitación las entradas S y R controlan el estado al que va a cambiar el latch cuando se aplica un nivel ALTO a la entrada de habilitación (EN, enable). El latch no cambia de estado hasta que la entrada EN está a nivel ALTO, pero, mientras que permanezca en este estado, la salida va a ser controlada por el estado de las entradas S y R. En este circuito, el estado no válido del latch se produce cuando las dos entradas S y R están simultáneamente a nivel alto.
Un diagrama de una máquina de estado genérica. El elemento de memoria contiene el nuevo estado conocido como el estado variable. Cuando la máquina de estado cuenta con los servicios, el estado variable es actualizado con el valor de la próxima etapa. Acá la nueva etapa es una función de ambos; el estado actual y algunos inputs. La nube de la lógica es un sistema que decide cual será el próximo estado, o la próxima lógica de estado.
Un clásico ejemplo de una máquina de estado es un contador. Por ejemplo, un ‘for loop’ o un circuito integrado lógico de 74×4040 trabajan como una máquina de estado. Cada vez que la máquina cambia de estado, ya sea por la línea del reloj o por el comportamiento de bucle, el estado de la memoria cambia a un nuevo estado igualando el estado anterior más uno. El set finito de estados que puede tener es la cantidad de números que puede contar.
Un contador básico expresado como máquina de estado
Partes de la máquina de estado del contador:
La máquina de estado avanza a cualquier ritmo que sea atendida.
Los profesores de lógica digital aman preguntar en las pruebas sobre Moore vs. Mealy y es por eso que tenemos que mencionarlo. La distinción entre ellas muchas veces no hace sentido, mientras escribas en una maquina de estado en C; es más como una: distinción de “como hacer un hardware lógico”. Para nosotros la lección de Moore y Mealy es que existió gente que pensó sobre este tipo de cosas e inventó formas de notarlo. Mientras ellos se centraban en el hardware lógico, nosotros nos centraremos en el software c.
Puedes notar que no importa cuál será el estado de la entrada, la salida solo depende el estado actual contenido dentro del elemento de la memoria.
en el cual entra en profundidad acerca de crear máquinas de estado desde funciones matemáticas, y describe esas salidas de máquinas de estado en términos de sus entradas.
Para diagramar la máquina Mealy, la salida está hecha para depender de ambos: el estado actual y la entrada. Aquí la nube de la lógica de la próxima etapa contiene la lógica de salida también:
También puede ser dibujado separando la nube en la lógica del próximo estado o lógica de salida.
Diagramas de Estado Abstractos
Hasta ahora, hemos visto que las máquinas de estado tienen una memoria que almacena el estado actual, que debe provenir de algún estado, y que irá al siguiente estado. Aunque nuestro diagrama actual no muestra como se mueve a través de estados, el propósito debiese ser dibujar un mapa de movimiento entre los estados para que podamos escribir un código que emule nuestro diseño. Esto se llama diagrama de estado.
Las posibles combinaciones al sumar dos bits son
      100110101
    +  11010101
    ———————————
     1000001010
Operamos como en el sistema decimal: comenzamos a sumar desde la derecha, en nuestro ejemplo, 1 + 1 = 10, entonces escribimos 0 en la fila del resultado y llevamos 1 (este "1" se llama arrastre). A continuación se suma el acarreo a la siguiente columna: 1 + 0 + 0 = 1, y seguimos hasta terminar todas la columnas (exactamente como en decimal).
El algoritmo de la resta en binario es el mismo que en el sistema decimal. Pero conviene repasar la operación de restar en decimal para comprender la operación binaria, que es más sencilla. Los términos que intervienen en la resta se llaman minuendo, sustraendo y diferencia.
Las restas básicas 0-0, 1-0 y 1-1 son evidentes:
La resta 0 - 1 se resuelve, igual que en el sistema decimal, tomando una unidad prestada de la posición siguiente: 10 - 1 = 1 y me llevo 1, lo que equivale a decir en decimal, 2 - 1 = 1. Esa unidad prestada debe devolverse, sumándola, a la posición siguiente. Veamos algunos ejemplos:
La tabla de multiplicar para números binarios es la siguiente:
·  | 0  | 1  | 
0  | 0  | 0  | 
1  | 0  | 1  | 
El algoritmo del producto en binario es igual que en números decimales; aunque se lleva a cabo con más sencillez, ya que el 0 multiplicado por cualquier número da 0, y el 1 es el elemento neutro del producto.
Por ejemplo, multipliquemos 10110 por 1001:
10110 X 1001
10110
00000
00000
10110
11000110
División de números binarios
La división en binario es similar al decimal; la única diferencia es que a la hora de hacer las restas, dentro de la división, éstas deben ser realizadas en binario.
Ejemplo
Dividir 100010010 (274) entre 1101 (13):Un paquete en VHDL es una colección de funciones, procedimientos, variables compartidas, constantes, archivos, alias, tipos, subtipos, atributos y componentes. Un archivo de paquete se utiliza a menudo (pero no siempre) junto con una biblioteca VHDL única. Los paquetes se usan con mayor frecuencia para agrupar todo el código específico de una biblioteca. Los paquetes pueden tener dos partes: una declaración y un cuerpo, aunque el cuerpo no es necesariamente necesario. La sección de declaraciones contiene los prototipos de las funciones y procedimientos definidos. La sección body contiene la implementación real de las funciones y procedimientos. Si ha utilizado C antes, la sección de declaración es similar a un archivo .h.
Los paquetes en combinación con las bibliotecas son una excelente manera de que VHDL permita al diseñador digital organizar su código. Al agrupar la funcionalidad que pertenece, los diseños tienen mucho más sentido y son más delgados. También le permiten escribir código que es reutilizable. Es posible que encuentre un archivo de paquete en particular que se utiliza una y otra vez a lo largo de sus diseños si tiene algunas funciones o constantes útiles.
Componentes en un archivo de paquete
Es preferible colocar todas las definiciones de componentes en un único archivo de paquete, en lugar de copiarlas y pegarlas en todas partes donde se cree una instancia del componente. De esta manera, si cambia el mapa de puertos, solo es necesario actualizar el archivo de paquete y las instancias reales.
Constantes y tipos en un archivo de paquete
Las constantes y los tipos que aparecen repetidamente en todo el código probablemente deben agruparse en un archivo de paquete. (O tal vez se pase en su diseño usando genéricos).
Funciones y procedimientos en un archivo de paquete
Las funciones y procedimientos deben existir tanto en la sección de declaración como en la sección del cuerpo. Como se ha dicho anteriormente, la declaración contiene el prototipo para la función o procedimiento y el cuerpo contiene la implementación real del código. A continuación se muestra un archivo de paquete de ejemplo que muestra algunas de las situaciones descritas anteriormente.
Para simular diseños de hardware electrónicos, se requiere la siguiente información:Descripción estructural del diseño (netlist o esquema)
Modelo de comportamiento para cada dispositivo del diseño (fuente VHDL o biblioteca de modelos)
Estímulo para el diseño (vectores de prueba)
Información de configuración de diseño (especificar la versión de cada modelo de dispositivo que se utilizará durante la simulación)
Se comenzó este diseño mediante instanciacion de componentes para ello se crearon diversos elementos individuales los cuales fueron integrad...