Versión: 14/10/2007
0. Repaso de VHDL El VHDL es un lenguaje muy amplio y fue concebido inicialmente para modelado y simulación, no para síntesis. Por tanto, no todas las descripciones VHDL son sintetizables, esto es, no todas las descripciones tienen una equivalencia en el nivel de puertas. Por otro lado, una misma funcionalidad puede describirse de muchas maneras. Es por esto que este capítulo no pretende ser un manual exhaustivo del VHDL, sino dar recetas para facilitar el diseño en VHDL. Todos los ejemplos que aquí se ponen pueden hacerse de otra manera. Antes de empezar con los ejemplos se recuerda que el VHDL no distingue entre mayúsculas y minúsculas. De todos modos, por claridad se recomienda mantener una misma forma de escribir. Esto es, si por ejemplo se ponen los operadores en mayúsculas, que se mantengan así en todo el diseño. Hay un conjunto de palabras reservadas que no se deben usar para otros propósitos (por ejemplo para nombres de señales). Estas son:
Figura 0-1: Lista de palabras reservadas del VHDL A continuación se dará una serie de ejemplos de diseños VHDL de dificultad incremental
0.1 Puerta AND Para diseñar un circuito en VHDL lo mínimo que se necesita es una entidad y una arquitectura. La entidad define el circuito como una caja, con sus puertos de entrada y salida. La arquitectura describe el interior del circuito. Una misma entidad puede tener varias arquitecturas. Así, si queremos describir una puerta AND en VHDL, crearemos la entidad: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity PUERTA_AND is port ( A : in std_logic; B : in std_logic; C : out std_logic ); end;
PUERTA_AND A C B
Figura 0-2: Representación de la entidad VHDL
Código 0-1: Entidad en VHDL En el código 0-1 se muestra la descripción VHDL de la puerta entidad.
AND.
En la figura 0-2 se muestra la representación de dicha
Hay varias cosas que se deben resaltar:
La entidad no se podría llamar AND ya que es una palabra reservada (ver figura 0-1). Aunque la entidad se llame PUERTA_AND, simplemente representa su nombre, pero no su funcionalidad. Que tenga ese nombre no significa que vaya a tener que funcionar como una puerta AND. Dependerá de lo que se describa en la arquitectura. Sin embargo, como es lógico, no es recomendable ponerle un nombre que no describa su funcionalidad. Los puertos de entrada se han declarado de tipo std_logic. Este es un tipo de datos de un solo bit que puede tener valores distintos de '0' y '1'. Y se usan así para simulación. Los valores que puede tener un std_logic son:
Diseño de Circuitos y Sistemas Electrónicos. 4º Telecomunicación. URJC
0-1
0. Repaso de VHDL
Versión: 14/10/2007
'U' : No ha recibido valor
'X' : Ha recibido valores distintos (desconocido fuerte)
'0' : Cero lógico (cero fuerte)
'1' : Uno lógico (uno fuerte)
'Z' : Alta impedancia
'W' : Desconocido débil
'L' : Cero débil
'H' : Uno débil
'-' : No importa
Tabla 0-1: Valores del std_logic Alternativamente se podían haber declarado como tipo recomendable utilizar el tipo std_logic.
bit.
El tipo
bit
sólo tiene los valores 0 y 1. Sin embargo es
Para poder usar el tipo std_logic hay que indicar que se usa el paquete std_logic_1164, y esto se hace con las dos líneas que están antes de la entidad Como se ha dicho, por ahora, nuestra entidad no hace nada, simplemente hemos definido sus entradas y salidas. Para describir su funcionalidad usamos la arquitectura: PUERTA_AND
architecture BEHAVIORAL of PUERTA_AND is begin C Dato8bIn, SerieOut => RegDesplzOut ); -- Referencia al componente Biestabla BIEST_DATO: BIESTABLE port map ( ResetN => RstN, Clk => Clk, A => Dato1bIn, Z => Dato1bReg ); -- Segunda referencia al componente Biestabla BIEST_SEL: BIESTABLE port map ( Diseño de Circuitos y Sistemas Electrónicos. 4º Telecomunicación. Universidad Rey Juan Carlos
0-9
0. Repaso de VHDL
Versión: 14/10/2007
ResetN Clk A Z
=> => => =>
RstN, Clk, Sel, SelReg
); COMP_MUX: MUX port map ( A => B => Sel => Z => ); end architecture;
RegDesplzOut, Dato1bReg, SelReg, Salida
Código 0-19: Ejemplo de diseño estructural
Diseño de Circuitos y Sistemas Electrónicos. 4º Telecomunicación. Universidad Rey Juan Carlos
0-10