You are on page 1of 71

Sintaxis VHDL

Entidad y Arquitectura Tipos de datos Seales y variables Asignaciones Procesos Sentencia IF ELSE Sentencia CASE

Entidades y Arquitecturas
Entidad => Indica QUE es el diseo.
Define la interfaz de un bloque, sin definir su comportamiento. Equivale a un smbolo en un diagrama esquemtico.

Arquitectura => Indica COMO trabaja el diseo.


Modela el comportamiento o estructura del circuito. Puede contener elementos RTL o comportamentales.

Entidad + Arquitecturas = opciones de diseo, diferentes soluciones para un mismo problema.

Entidad
Define la interfaz con el mundo exterior (i.e., pines de entrada y salida) Funciona como un smbolo esquemtico, con la diferencia que se usa texto en vez de smbolos grficos
Entradas Puerto

ENTITY ejemplo IS PORT ( a, b : in BIT; c, d : out BIT); END ejemplo;


Nombre de la Entidad

Tipo de dato

Salidas
IN: entrada OUT: salida INOUT: bidireccional

Arquitectura
Define la implementacin del diseo (i.e., ecuaciones lgicas). Funciona como un circuito esquemtico.

ARCHITECTURE pld OF ejemplo IS BEGIN c <= a AND b; d <= a OR b; Las expresiones lgicas y END pld; aritmticas van entre BEGIN
y END.

Ejemplo de un diseo completo


ENTITY define los puertos (interfaz) del diseo.

ENTITY example IS
PORT ( END example; ARCHITECTURE pld OF example IS BEGIN b <= a; END pld; a : in BIT; b : out BIT); ENTITY y ARCHITECTURE conforman un par enlazado mediante un nombre.

ARCHITECTURE define la implementacin.

VHDL no es sensitivo al tipo de carcter

Puertos, Seales y Variables


Los puertos se especifican en la entidad:
IN OUT INOUT Puerto de entrada Puerto de salida Puerto bidireccional

Las seales y variables se usan en la arquitectura


SIGNAL Se declara antes del BEGIN de la arquitectura y se puede usar en cualquier lugar de ella. Si va en un proceso su valor se actualiza al salir de l. <= VARIABLE Se declara y utiliza en un proceso y actualiza inmediatamente su valor asignado. :=

Tipos de Datos
VHDL define que cada seal debe tener un tipo de dato asociado que se indica cuando la seal es declarda por primera vez. Tipos diferentes de datos no pueden asignarse unos a otros. Todos los puertos, seales y variables deben ser de algn tipo de dato. Existen tipos ya construidos pero tambin pueden crearse nuevos. TIME => 10 ns 2.5 ps BIT => 0 1 BIT_VECTOR => grupo de bits 00101101 0101 STD_LOGIC = {0, 1, X, Z} ms 5 otros tipos no usados para sntesis. X (no x) es valor de no importa. Z (mayscula) es valor de tres-estados. Est soportado por el estndar IEEE 1164. STD_LOGIC_VECTOR => p.e. 0Z1X011 Carcter => A x 7 Cadenas => VHDL es un lenguaje de alto nivel Real => 1.23 -9.8

Tipo de Dato INTEGER


Se comporta como un entero en lgebra El rango es especificado por el usuario o por defecto por el compilador.
El usuario puede especificar cualquier subrango: pablo :INTEGER range 0 TO 255; vilma :INTEGER range 200 DOWNTO 54; Si el rango no es especificado ser el rango por defecto determinado por el compilador. doctorRajuela :INTEGER;

Buses
VHDL ofrece tipos vectores para crear buses Tipos de vectores comunes:
BIT_VECTOR, STD_LOGIC_VECTOR

Ejemplos
SIGNAL pablo :bit_vector(7 downto 0); SIGNAL betty :std_logic_vector(3 downto 0); SIGNAL bambam :std_logic_vector(1 to 3);

El MSB queda indicado por el ndice de la izquierda: pablo(7), betty(3) bambam(1)


El LSB queda indicado por el ndice de la derecha: pablo(0), betty(0) bambam(3)

Asignacin de Buses
Bus completo
pebbles <= 11111111;

Un bit de un bus
dino (3) <= 1;

La direccin del subrango debe ser igual como en la declaracin del vector

Una parte del bus


SIGNAL picapiedras :bit_vector(7 downto 0); picapiedras (3 downto 2) <= 11;

Encadenacin
SIGNAL mas :bit_vector (8 downto 0); mas <= a(1) & b(3 downto 0) & 0 & 010;

Agregado
mas(3 downto 0) <= ( a(1), b(3), 0, 1); maz <= ( 3=> 1, 1 downto 0 => 1, 2 => L ); max <= ( 3=> 1, OTHERS => N );

Tipos Enumerados
Los tipos enumerados son los tipos ms comunes creados por el usuario. Se emplean principalmente para las mquinas de estado. Los tipos se enumeran en una secuencia binaria, comenzando desde cero incrementandose de uno en uno. Ejemplos
TYPE pais IS (Alemania, Italia, Japon); TYPE luces IS (rojo, verde, ambar, negro);

Lgica Combinacional
Las salidas en un tiempo dado son funcin solamente de las entradas en ese tiempo (decodificadores, sumadores multiplexores). Sentencias VHDL combinacionales:
asignaciones concurrentes procesos que no dependen de un reloj.
ARCHITECTURE a OF Sumador IS BEGIN <asignaciones concurrentes> <sentencias de procesos> END a;

Simple

Asignaciones de Seales Concurrentes


a <= r or t; b <= ((r or t) and not(g xor h));

Condicional
Estas asignaciones no se emplean dentro de los procesos

q <= 0 WHEN clr = 0 ELSE 1 WHEN set = 1 ELSE X ; WITH sel SELECT q <= a WHEN 0, b WHEN 1;

Selectiva

Especifican los valores de las seales para cualquier combinacin de las entradas.

La sntesis crea puertas y conexiones lgicas. No se crean latches ni flipflops.

Asignacin mltiple
Cuando ms una seal recibe dos asignaciones de seales separadas, se dice que es manejada por mltiples fuentes. En esos casos, se necesita una Funcin de Resolucin. Si no existe una funcin de resolucin se dice que la asignacin mltiple es ilegal. El tipo std_ulogic no soporta asignacin mltiple, pero si el tipo std_logic. VHDL para sntesis de MAX+plus II no permite asignaciones mltiples en sentencias combinacionales.

Asignacin simple
Es una asignacin directa, como en una funcin booleana o matemtica:
c <= a AND b; d <= e; x <= y + z; -- crea una puerta AND -- conecta dos nodos -- suma y con z, luego asigna el -- resultado a x
ENTITY EjmAsgSimple IS PORT ( a, b, e : IN BIT; c, d : OUT BIT END EjmAsgSimple; ARCHITECTURE maxpld OF EjmAsgSimple IS BEGIN c <= a AND b; d <= e; END maxpld;

);

Asignacin Condicional
Lista una serie de expresiones que son asignadas a una seal luego de una evaluacin positiva de una o ms expresiones booleanas. Cada expresin booleana se valida en el orden escrito.

-- Multiplexor 2 a 1: f <= a si s = 0, b si s = 1 ARCHITECTURE mux OF Mux2a1 IS BEGIN f <= a WHEN s = '0' ELSE b; END Mux2a1;

Ejemplo: Codificador con prioridad


ENTITY condsigm IS PORT( high, mid, low : IN BIT; q : OUT INTEGER RANGE 0 TO 3 ); END condsigm; ARCHITECTURE maxpld OF condsigm IS BEGIN q <= 3 WHEN high = '1' ELSE -- prioridad ms alta 2 WHEN mid = '1' ELSE -- media prioridad 1 WHEN low = '1' ELSE -- prioridad ms baja 0; -- no hay seal activa END maxpld;

Asignacin Selectiva
Lista alternativas disponibles para cada valor de una expresin.

ENTITY selsig IS PORT( d0, d1, d2, d3: IN BIT; s : IN INTEGER RANGE 0 TO 3; q : OUT BIT); END selsig;
ARCHITECTURE maxpld OF selsig IS BEGIN WITH s SELECT output <= d0 WHEN 0, d1 WHEN 1, d2 WHEN 2, d3 WHEN 3; END maxpld;

Multiplexor 4 a 1

Sentencias de Procesos
Agrupa sentencias secuenciales. Una sentencia Wait o una Lista de Sensibilidad describe las condiciones para ejecutar la sentencia Process (Proceso). Dentro del proceso, las sentencias se ejecutan secuencialmente.

La Sentencia Process
Usando lista de sensibilidad (Sensitivity List):
PROCESS (a, b, c, d) BEGIN -- sentencia secuencial #1 -- ... -- sentencia secuencial #N END PROCESS;

Este proceso se ejecuta luego de un cambio en cualquier seal de la lista de sensibilidad.

La Sentencia Process
Usando la sentencia Wait:
PROCESS BEGIN WAIT condicin -- sentencia secuencial #1 -- ... -- sentencia secuencial #N END PROCESS;

Este proceso se ejecuta cuando la condicin WAIT es verdadera

La Sentencia Process
Utilice etiquetas para la organizacin de varios procesos:

abcd: PROCESS (a, b, c, d) BEGIN -- sentencia secuencial #1 -- ... -- sentencia secuencial #N END PROCESS abcd;

La etiqueta (label) identifica procesos especficos en una arquitectura de mltiples procesos

Puerta OR en un proceso combinacional

entity PuertaOR is port (A,B : in bit; Z : out bit); end PuertaOR;

architecture comb of PuertaOR is begin OR_FUNC: process (A,B) begin if (A='1' or B='1') then Z <= '1'; else Z <= '0'; end if; end process OR_FUNC; end comb;

Ejemplo: Nmero de Bits en 1


-- MAX+plus II VHDL Example -- Combinatorial Process Statement -- Copyright (c) 1994 Altera Corporation ENTITY proc IS PORT (d : IN BIT_VECTOR (2 DOWNTO 0); q : OUT INTEGER RANGE 0 TO 3 ); END proc; ARCHITECTURE maxpld OF proc IS BEGIN PROCESS (d) -- cuenta el nmero de bits en d que tienen 1 VARIABLE num_bits : INTEGER; BEGIN num_bits := 0; FOR i IN d'RANGE LOOP IF d(i) = '1' THEN num_bits := num_bits + 1; END IF; END LOOP; q <= num_bits; END PROCESS; END maxpld;

Sentencia if
Elige una accin basada en una condicin. Permite las palabras ELSIF, ELSE. Debe estar dentro de una sentencia Process
IF expresion THEN

IF expresion THEN
sentencia; sentencia; END IF; IF expresion THEN sentencia; sentencia; ELSE sentencia; sentencia; END IF; IF expresion THEN sentencia; sentencia;

sentencia;
sentencia; ELSIF expresion THEN sentencia;

ELSIF expresion THEN


sentencia; sentencia; ELSIF expresion THEN

sentencia;
ELSIF expresion THEN sentencia; sentencia;

sentencia;
sentencia; END IF;

ELSE
sentencia; sentencia; END IF;

Sentencia if : Ejemplo
ENTITY if_ex IS PORT (sel, a, b y END if_ex;

: IN BIT; : OUT BIT);

ARCHITECTURE if_ex OF if_ex IS BEGIN PROCESS (sel, a, b) BEGIN IF sel = '1' THEN y <= a; ELSE y <= b; Esta descripcin END IF; un multiplexor END PROCESS; END if_ex;

resulta en

Sentencias Case
Usado para generar lgica combinacional Se deben especificar todas las posibilidades con una sentencia When Others
CASE expresion IS WHEN valor_constante =>

CASE val IS WHEN 00 => q <= i0; WHEN 01 => q <= i1; WHEN OTHERS => q <= X; END CASE;

sentencia; sentencia; WHEN valor_constante => sentencia; sentencia; WHEN OTHERS => sentencia; sentencia; END CASE;

Construcciones VHDL para una AND


proceso con case

asignacin directa

proceso con if - else

asignacin condicional
asignacin selectiva

Sntesis de AND

Diagrama Esquemtico
En el esquemtico, B es la seal que retarda menos, en VHDL es A quien retarda menos (se declara primero que B)

Descripcin VHDL

Simulacin Lgica

Simulacin Temporal

FLEX

MAX

Variables VHDL
ENTITY var_ex IS PORT ( x, a, b :IN BIT; z :OUT BIT); END var_ex; ARCHITECTURE example OF var_ex IS BEGIN PROCESS (x, a, b) VARIABLE tmp :BIT ; BEGIN IF (x = '1') THEN tmp := a AND b; z <= tmp; ELSE z <= '1'; END IF; END PROCESS; END example;

La variable tmp mantiene un valor intermedio.

Seales VHDL
ENTITY sig_ex IS PORT ( a, b, c :IN BIT; y :OUT BIT); END sig_ex; ARCHITECTURE example OF sig_ex IS SIGNAL temp :BIT; BEGIN temp <= a XOR b; y <= temp AND c; END example;

Esta seal es utilizada para interconectar primitivas

Seales VHDL
ENTITY mul IS para conectar procesos PORT (a, b, c, selx, sely : IN BIT; data_out : OUT BIT); END mul; ARCHITECTURE ex OF mul IS process_b: PROCESS(temp, c, sely) SIGNAL temp : BIT; BEGIN BEGIN IF (sely = 0) THEN process_a: PROCESS (a, b, selx) data_out <= temp; BEGIN ELSE IF (selx = 0) THEN data_out <= c; temp <= a; END IF; ELSE END PROCESS process_b; temp <= b; END ex; END IF; END PROCESS process_a;

La seal temp es utilizada

Esquemtico Resultante
Generado de process_a. Procesos interconectados por la seal temp.

Generado de process_b.

Seales vs. Variables

SEALES UTILIDAD Representan interconexiones del circuito Visin global (en cualquier lugar) Se actualiza al final de una sentencia Process (el nuevo valor no est disponible)

VARIABLES Representan almacenamiento local Alcance local (dentro del proceso) Actualizacin inmediata (nuevo valor disponible)

ALCANCE

COMPORTAMIENTO

Seales vs. Variables


Ejemplo del correcto uso de VARIABLE
Nuevo valor disponible.

ENTITY good IS PORT (i0, i1, i2, i3, a, b: IN BIT; q : OUT BIT); END good; ARCHITECTURE right OF good IS BEGIN PROCESS (i0, i1, i2, i3, a, b) VARIABLE val: INTEGER RANGE 0 TO 3; BEGIN val := 0; IF (a = 1) THEN val := val + 1; END IF; IF (b = 1) THEN val := val + 2; END IF;

CASE val IS WHEN 0 => q <= i0; WHEN 1 => q <= i1; WHEN 2 => q <= i2; WHEN 3 => q <= i3; END CASE END PROCESS; END right;

Seales vs. Variables


Ejemplo de incorrecto uso de SIGNAL
Nuevo valor aun no est disponible
CASE val IS WHEN 0 => q <= i0; WHEN 1 => q <= i1; WHEN 2 => q <= i2; WHEN 3 => q <= i3; END CASE; END PROCESS; END wrong;

ENTITY bad IS PORT (i0, i1, i2, i3, a, b : IN BIT; q : OUT BIT); END bad; ARCHITECTURE wrong OF bad IS SIGNAL val : INTEGER RANGE 0 TO 3; BEGIN PROCESS (i0, i1, i2, i3, a, b) BEGIN val <= 0; IF (a = 1) THEN val <= val + 1; END IF; IF (b = 1) THEN val <= val + 2; END IF;

Uso no-combinacional de Variable


ENTITY unsynth IS PORT (sela, selb :IN BIT; dout :OUT BIT); Las variables deberan ser END unsynth; asignadas en cada paso a ARCHITECTURE example OF unsynth IS travs de un proceso BEGIN PROCESS (sela, selb) VARIABLE temp : BIT ; La variable temp retiene BEGIN el valor anterior si sela = 0 IF (sela = '1') THEN y selb = 0. temp := '1'; ELSIF (selb = '1') THEN temp := '0'; END IF; dout <= temp; Este circuito define un latch, END PROCESS; no un circuito combinatorio. END example;

Paquetes VHDL
Los paquetes son colecciones de elementos incluyendo descripciones de tipos de datos. Pueden ser compartidos por mltiples diseos y diseadores. Existen paquetes estndares que estn incluidos con VHDL. Tambin pueden crearse paquetes nuevos.

Paquetes VHDL comunes


IEEE.std_logic_arith (funciones aritmticas) IEEE.std_logic_signed (funciones aritmticas con signo) IEEE.std_logic_unsigned (funciones aritmticas sin signo) IEEE.std_logic_1164 (funciones lgicas) ALTERA.maxplus2 (declaraciones de componentes para todas las macrofunciones de Altera)

Como usar un Paquete


LIBRARY <nombreLibrera>; USE < nombreLibrera >.<nombrePaquete>.all; En MAX+PLUS II, <nombreLibrera> es un subdirectorio de c:\maxplus2\max2vhdl Un nombre de librera puede ser IEEE, ALTERA Puede especificarse un elemento particular en vez de todo
Library

Package
Componentes individuales todos (.all)

Paquetes en MAX+PLUS II
Ejemplo: LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.std_logic_arith.all; USE IEEE.std_logic_unsigned.all; LIBRARY altera; USE altera.maxplus2.all;

Paquetes definidos por el usuario


Los paquetes definidos por el usuario deben estar en el mismo directorio del diseo Para usar estos paquetes escriba: LIBRARY WORK; USE WORK.<nombrePaquete>.all;

Operadores Aritmticos

Operador

Descripcin Suma, resta Multiplicacin (solo potencias de 2 en dispositivos MAX) Mayor que, menor que

+,* >, <

>=, <= Mayor o igual, menor o igual =, /= igual, no igual a

Sobrecarga de operadores
VHDL define funciones aritmticas y booleanas solamente para tipos de datos predefinidos por el lenguaje
Operadores aritmticos tales como +, -, <, >, <=, >= estn definidos para el tipo INTEGER Operadores booleanos tales como AND, OR, NOT, NAND, NOR, XOR estn definidos solo para el tipo BIT

Sobrecarga de operadores
Permite usar funciones aritmticas y booleanas con ms tipos de datos

Sobrecarga de operadores: Implementacin


LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all;

Incluya estas sentencias al comienzo de cada archivo de diseo

ENTITY overload IS PORT ( a : IN std_logic_vector (3 downto 0); b : IN std_logic_vector (3 downto 0); sum : OUT std_logic_vector (4 downto 0)); END overload; ARCHITECTURE example OF overload IS BEGIN adder_body:PROCESS (a, b) BEGIN sum <= a + b; END PROCESS adder_body; END example;

Esto permite ejecutar aritmtica sobre tipos de datos que no han sido predefinidos

Reglas de Sntesis en MAX+plus II


No todos los procesos son sintetizables Para que un proceso sea sintetizable, debe cumplirse:
Circuito combinacional: sensitivo a todas las seales de entrada Circuito secuencial: sensitivo a un solo flanco de reloj y opcionalmente a seales asncronas (CLEAR, PRESET, LOAD).

Latch D
El siguiente cdigo VHDL describe el comportamiento de un latch transparente. PROCESS es sensitivo a data y gate Note la similitud con un multiplexor

PROCESS (data, gate) BEGIN IF gate = 1 THEN q <= data; END IF; END PROCESS;

q copia el valor de data siempre que gate sea 1.

Flipflop D
El reloj (CLK) es la nica seal en la lista de sensibilidad

PROCESS (clk) BEGIN IF clk = 1 THEN q <= d; END IF; END PROCESS;

Latch D vs. Flipflop D

PROCESS (d, clk) BEGIN IF clk = 1 THEN q <= d; END IF; END PROCESS;

PROCESS (clk) BEGIN IF clk = 1 THEN q <= d; END IF; END PROCESS;

El proceso del flipflop no es sensitivo a la entrada d

Flipflop D
Implementacin usando PROCESS con Wait

PROCESS BEGIN WAIT UNTIL clk = 1 q <= d; END PROCESS;

Flipflop JK
Esta asociacin de bits permite simplificar la descripcin

Para indicar flanco de subida se emplea: clkEVENT and clk = 1 tmp se requiere porque el VHDLde MAX+plus II no permite leer las salidas, y en tales casos se emplean seales auxiliares.

Registros con Clear Asncrono


Clock y Clear estn en la lista de sensibilidad Qu significa clockEVENT?

PROCESS (clock, clear) BEGIN IF clear = 0 THEN q <= 0; ELSIF clockEVENT and clock = 1 THEN q <= d; END IF; END PROCESS;

Relojes de puertas
El reloj debe formarse fuera de la descripcin del proceso. El nuevo reloj debe ser una seal. Se recomienda realizar diseos sncronos para CPLDs.

ARCHITECTURE ex OF gatedclock IS SIGNAL gclock : std_logic; BEGIN gclock <= clka AND clkb; PROCESS (gclock) BEGIN IF gclock = '1' THEN q <= d; END IF; END PROCESS; END ex;

El reloj es generado aqu...

...luego se utiliza aqu.

Registro de 3 Bits
ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT); END reg1; ARCHITECTURE reg1 OF reg1 IS SIGNAL a, b : BIT; BEGIN PROCESS (clk) BEGIN IF clk = 1 THEN a <= d; b <= a; q <= b; END IF; END PROCESS; END reg1;

Registro de 2 bits
ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT); END reg1; ARCHITECTURE reg1 OF reg1 IS SIGNAL a, b : BIT; BEGIN PROCESS (clk) BEGIN IF clk = 1 THEN a <= d; b <= a; END IF; END PROCESS; q <= b; La asignacin de la seal se ha movido. END reg1;

Registro de 2 Bits
ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT); END reg1;

Cmo se define un registro de N bits?

ARCHITECTURE reg1 OF reg1 IS SIGNAL a, b : BIT; BEGIN PROCESS (clk) BEGIN IF clk = 1 THEN b <= a; a <= d; END IF; END PROCESS; q <= b; El orden de la asignacin de las END reg1;

seales ha cambiado.

Registro con variables?


ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT); END reg1; ARCHITECTURE reg1 OF reg1 IS BEGIN PROCESS (clk) VARIABLE a, b : BIT; BEGIN IF clk = 1 THEN a := d; b := a; q <= b; END IF; END PROCESS; END reg1;

Las seales se cambiaron por variables.

Contadores
Los contadores son acumuladores que siempre agregan 1

ARCHITECTURE example OF counter IS BEGIN PROCESS (clk) VARIABLE count : std_logic_vector (7 downto 0); BEGIN IF clk = '1' THEN count := count + 1; END IF; q <= count; END PROCESS; END example;

Contadores
Contador ascendente con carga sncrona

ARCHITECTURE example OF counter IS BEGIN PROCESS (clk) VARIABLE count : std_logic_vector (7 downto 0); BEGIN IF clk = '1' THEN IF ldn = '0' THEN count := load; ELSE count := count + 1; END IF; END IF; q <= count; END PROCESS; END example;

Mquinas de Estado
CASE current_state IS WHEN State_A => flag <= '0'; IF data = '0' THEN ELSE next_state <= END IF; WHEN State_B => flag <= '0'; IF data = '0' THEN ELSE next_state <= END IF; WHEN State_C => flag <= '0'; IF data = '0' THEN ELSE next_state <= END IF; WHEN State_D => flag <= '1'; IF data = '0' THEN ELSE next_state <= END IF; END CASE;

next_state <= State_A; State_B;


a = 0 check

idle a = 0 start run

next_state <= State_B; State_C;

next_state <= State_C; State_D;

next_state <= State_D; State_A;

Estructura de una Mquina de Estado


Use tipos enumerados para crear los valores de los estados
Los nombres de los estados estn definidos como un tipo. La mquina comienza en el primer estado de la lista.
ARCHITECTURE example OF statemac IS TYPE state_type IS (state_a, state_b, state_c, state_d); SIGNAL state : state_type; BEGIN

Estructura de una Mquina de Estado


Use dos procesos para describir la operacin de la mquina
Para determinar el estado Para determinar las banderas de salida
fsm: PROCESS BEGIN WAIT UNTIL clock = 1; CASE state IS WHEN state_a => IF data = 0 THEN state <= state_a; ELSE state <= state_b; END IF; WHEN state_b => IF data = 0 THEN state <= state_c; END IF; END CASE; END PROCESS fsm; output: PROCESS (state) BEGIN CASE state IS WHEN state_a => flag <= 1; WHEN state_c => flag <= 1; WHEN OTHERS => flag <= 0; END CASE; END PROCESS output;

Diseos de Archivos Mltiples


VHDL permite el diseo jerrquico a travs de la instanciacin (ejemplificacin) de componentes
top.vhd entity-architecture top component mid_a component mid_b

mid_a.vhd entity-architecture mid_a component bottom_a

mid_b.vhd entity-architecture mid_b component bottom_a component bottom_b

bottom_a.vhd entity-architecture bottom_a

bottom_b.vhd entity-architecture bottom_b

Instanciacin de Componentes
Los diseos de nivel superior deben tener una Declaracin de Componentes para un diseo de nivel inferior antes de que pueda ser instanciado.
ARCHITECTURE upper OF top IS SIGNAL count : std_logic;

Declaracin del componente.

COMPONENT simpcnt PORT ( clk : IN bit; q : OUT std_logic); END COMPONENT; BEGIN u1

simpcnt PORT MAP (clk => sysclk, q => count);

Uso del componente

Libreras de Macrofunciones y Primitivas


Los vendedores de Silicio a menudo ofrecen libreras de macrofunciones y primitivas
Pueden ser usados para controlar la implementacin fsica del diseo dentro del PLD

Las libreras especficas del vendedor mejoran el desempeo y la eficiencia de los diseos Altera provee una completa librera de macrofunciones compatibles con LPM, ms otras primitivas

Instanciacin de Macrofunciones
Todas las macrofunciones de Altera y componentes primitivos estn declarados en el paquete ALTERA.maxplus2.all Todos los puertos de los componentes en este paquete son del tipo STD_LOGIC STD_LOGIC_VECTOR

Instanciacin de Macrofunciones
Use la librera ALTERA para la instanciacin de macrofunciones para no declarar los componentes

LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; LIBRARY ALTERA; USE ALTERA.maxplus2.ALL; ENTITY macro IS PORT(clock, enable : IN std_logic; Qa, Qb, Qc, Qd : OUT std_logic); END macro; ARCHITECTURE example OF macro IS BEGIN u1 :gray4 PORT MAP (clk => clock, ena => enable, qa => Qa, qb => Qb, qc => Qc, qd => Qd); END example;

RAM & ROM


MAX+PLUS II y VHDL soportan varias funciones LPM (parametrizables) y otras megafunciones que permiten implantar RAM y ROM en los dispositivos de Altera.
lpm_ram_dq lpm_ram_io lpm_rom lpm_ram_dp csdpram memoria de doble puerto de ciclo compartido. Solo para FLEX 10K, FLEX 10KA, y FLEX 10KB. lpm_fifo_dc FIFO de dos relojes lpm_fifo Single-Clock FIFO buffer csfifo Single-Clock FIFO buffer. Solo soportado para FLEX 10K, FLEX 10KA, y FLEX 10KB.

LIBRARY ieee; USE ieee.std_logic_1164.ALL; LIBRARY lpm; USE lpm.lpm_components.ALL; LIBRARY work; USE work.ram_constants.ALL; ENTITY ram256x8 IS PORT( data: IN STD_LOGIC_VECTOR (DATA_WIDTH-1 DOWNTO 0); address: IN STD_LOGIC_VECTOR (ADDR_WIDTH-1 DOWNTO 0); we, inclock, outclock: IN STD_LOGIC; q: OUT STD_LOGIC_VECTOR (DATA_WIDTH - 1 DOWNTO 0) ); END ram256x8; ARCHITECTURE example OF ram256x8 IS BEGIN inst_1: lpm_ram_dq GENERIC MAP (lpm_widthad => ADDR_WIDTH, lpm_width => DATA_WIDTH) PORT MAP (data => data, address => address, we => we, inclock => inclock, outclock => outclock, q => q); END example;

Ejemplo de RAM

Ejercicio: Un Controlador de Trfico


El semforo posee tres luces por cada lado (los estados de las luces opuestas coinciden.) Existen dos horarios de funcionamiento que corresponden a los perodos de trfico alto y bajo. En trfico alto las luces se encienden en el orden Rojo, mbar, Verde pero el semforo puede operar de dos modos: en modo manual las luces cambian bajo el control de un pulsador, y en el modo automtico las luces cambian luego de ciertos perodos de tiempo predefinidos. Durante la noche, la luz mbar de una avenida y la luz Roja de la otra oscilan cada segundo. El cambio de funcionamiento de da para noche (y viceversa) se realiza pasando por un estado donde las luces rojas se encienden por 10 segundos.

Soporte Tcnico de Altera


Encuentre las respuestas a sus preguntas en MAX+PLUS II Help o consulte las Aplicaciones de Altera
Field Applications Engineers: Contacte a su oficina de ventas local Factory Applications Engineers: (800) 800-EPLD email: sos@altera.com

Sistema de fax automatizado Altera Express : 1-800-5-ALTERA Bulletin board service (BBS): (408) 954-0104 FTP: ftp.altera.com Sitio WEB: http://www.altera.com Consulte en la seccin Clases de entrenamiento latinoamericana por el Seminarios Ing. Guillermo Jaquenod,
representante de Altera para esta regin.

You might also like