Sei sulla pagina 1di 4

REGLAS BSICAS DE PROGRAMACIN EN VHDL

En VHDL se debe definir como mnimo una entidad y una arquitectura. La entidad es la parte en la cual se definen los pines de entrada y salida de un bloque funcional, mientras que la arquitectura es la parte en la cual se define el comportamiento de la entidad. Se emplea la siguiente sintaxis para definir la entidad equivalente al circuito de la figura: entity ejemplo1 is port ( De la figura se observa que las seales A, B, C, D y E son entradas al A: in std_logic; circuito, de all que se definan como in. Las seales Q2 y Q4 son seales B: in std_logic; de salida del circuito, por lo cual se definen como out, mientras que Q1 C: in std_logic; aunque es una seal de salida, se realimenta internamente dentro del D: in std_logic; circuito, por lo cual se declara como buffer. Finalmente Q3 es un pin E: in std_logic; que puede ser entrada o salida, por tal razn se declara con inout. CLK: in std_logic; Q1: buffer std_logic; En todos los casos, cada una de las seales se declara con el tipo de dato Q2: out std_logic; std_logic. Este tipo de dato soporta los valores 1, 0, alta impedancia, Q3: inout std_logic; estado no importa, entre otros. Q4: in std_logic ); Ntese que la ltima declaracin (Q4) no termina con ; end ejemplo1;
A B Q1 Q2

C D E Q4 Q3

A Q1 B Q2 C Ejemplo1 Q3 D Q4 CLK

CLK

Otros tipos de datos diferentes a std_logic son: bit permite definir pines de entrada/salida que soportan solamente los valores 0 y 1 (no alta impedancia) std_logic_vector define un vector de bits o bus integer define una seal que almacena valores enteros. Este tipo de dato se usa para soportar operaciones aritmticas VHDL permite especificar tambin nuevos tipos de datos. Esta funcionalidad se explicar ms adelante, pues se emplea para asignarle nombres a los estados de una mquina secuencial. El siguiente ejemplo se muestra como usar los vectores bits para definir una entidad que simboliza un contador de 4 bits. entity contador is port ( CLK: in std_logic; CLR: in std_logic; Q: out std_logic_vector(3 downto 0) ); end contador; Ntese que se emplea la sentencia (3 downto 0) para indicar que el bit ms significativo se encuentra a la izquierda y el menos significativo a la derecha.

PROBLEMAS. Definir las entidades para: a) Un multiplexor de 4 a 2. b) Un buffer triestado c) Un decodificador BCD a 7 segmentos que contenga un registro de datos interno para almacenar la cifra a mostrar, es decir, incluir seal de recarga. d) Un contador binario ascendente/descendente de 8 bits con entrada de precarga y salida de acarreo. e) Una unidad aritmtico-lgica de 4 bits con instrucciones de suma, resta, complemento a 2, complemento a 1, and, or, xor y comparacin.

Para definir las arquitecturas, VHDL permite tres modos diferentes de definir una solucin al problema las cuales se llaman: flujo de datos, descripcin de comportamiento o funcional, y forma estructural . Para cada una de ellas se cuenta con diferentes instrucciones que permiten codificar de muchas formas un circuito, lo cual hace de VHDL un lenguaje algo complejo de aprender pero a su vez muy rico en formas de especificar la solucin de un problema. FLUJO DE DATOS El estilo de flujo de datos se usa para establecer un conjunto de asignaciones a seales que se realizan en forma simultnea, trmino conocido con el nombre de instrucciones concurrentes. Supongamos por ejemplo que se ha definido la siguiente entidad para un multiplexor de 4 a 2, en el cual las ecuaciones booleanas que describen su funcionamiento son:
A[0] A[1] Q[0]

Ecuaciones: Q[0] = A[0]S' + B[0]S Q[1] = A[1]S' + B[1]S

B[0] B[1]

Q[1]

entity mux42 is port ( A: in std_logic_vector(1 downto 0); B: in std_logic_vector(1 downto 0); Q: out std_logic_vector(1 downto 0); S: in std_logic ); end mux42;

Se tiene entonces, partiendo de las ecuaciones booleanas la siguiente implementacin de la arquitectura: architecture mux42arq of mux42 is begin Q(0) <= (A(0) and not S) or (B(0) and S ); Q(1) <= (A(1) and not S) or (B(1) and S ); end mux42arq; En esta definicin, mux42arq es el nombre de la arquitectura que se est definiendo y mux42 es el nombre de la entidad a la cual se le est definiendo la arquitectura. Al especificar las ecuaciones booleanas otros operadores permitidos son: and, or, not, nand, nor, xor, xnor. Para ilustrar el carcter concurrente de VHDL veamos el siguiente ejemplo del biestable R-S. Si recordamos este circuito tiene la caracterstica de que la salida depende a su vez de la salida pasada (o el estado pasado en el lenguaje tcnico). Cuando se analizan este tipo de circuitos es necesario realizar mltiples realimentaciones al sistema para conocer el valor final del biestable. Por esta razn describir el funcionamiento de un biestable R-S en un lenguaje tradicional como el C, resulta muy complicado, sin embargo, en VHDL basta con especificar el conjunto de ecuaciones booleanas. Se muesta a continuacin dos posibles arquitecturas vlidas para el biestable. Si se analizaran siguiendo la prueba de escritorio de un lenguaje tradicional, el resultado de ambas especificaciones sera diferente, pero en VHDL, ambas arquitecturas producen los mismos resultados. El porque de ello se debe a que las asignaciones a seales se realizan simultneamente (dado a que estamos describiendo hardware y no software) y no una a continuacin de la otra como en un lenguaje tpico!!!.
R Q

QN

architecture rsarq1 of biest_rs is begin Q <= R nor QN; QN <= S nor Q; end rsarq1;

architecture rsarq2 of biest_rs is begin QN <= S nor Q; Q <= R nor QN; end rsarq2;

Veamos otras formas de especificar soluciones al mismo problema usando otras palabras reservadas de VHDL.

architecture mux42arq of mux42 is begin Q(0) <= A(0) when (S = '0') else B(0); Q(1) <= A(1) when (S = '0') else B(1); end mux42arq;

architecture mux42arq of mux42 is begin Q <= A when (S = '0') else B; end mux42arq;

En la arquitectura de la izquierda se emple acceso a los vectores al nivel de bits, lo cual trae consigo una descripcin ms Compleja, en cambio la de la derecha usa asignaciones de vectores de bits. Para la arquitectura de la derecha la instruccin Q <= A when (S = '0') else B; se puede interpretar como: Q es igual a A si S es igual a 0, en caso contrario tome el valor de B. Esta sentencia se puede usar para implementar tablas de la verdad de forma muy fcil. Supongamos que queremos implementar la siguiente tabla de la verdad: entity ejemplo2 is port ( ABC: in std_logic_vector(2 downto 0); Q: out std_logic_vector(1 downto 0) ); end ejemplo2; architecture ejem2arq of ejemplo2 is begin Q <= "01" when ( (ABC = "000") or (ABC = "101") ) else "10" when ( (ABC = "001") or (ABC = "010") ) else "11" when ( ABC = "110" ) else "00"; end ejem2arq;

A 0 0 0 0 1 1 1 1

B 0 0 1 1 0 0 1 1

C 0 1 0 1 0 1 0 1

Q1 Q0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 0 0

Al compara los 2 ejemplos se encuentra que: si la asignacin y/o comparacin es con un bit, el valor constante se escribe con comilla simple, pero si es un vector, se hace con comilla doble. Otra forma de especificar en flujo de datos una tabla de la verdad o circuito combinacional es usando la sentencia with select. architecture ejem2arq of ejemplo2 is begin with ABC select Q <= "01" when "000", "10" when "001", "10" when "010", "01" when "101", "11" when "110", "00" when others; end ejem2arq; PROBLEMAS. Definir las arquicturas para: a) Un buffer triestado b) Un decodificador BCD a 7 segmentos simple c) Un decodificador BCD a 7 segmentos que contenga lnea de habilitacin. Cuando la lnea de habilitacin est en alto la salida es Hi-Z, en caso contrario el dispositivo operar correctamente. DESCRIPCIN FUNCIONAL En la descripcin funcional , a diferencia con la de flujo de datos, las sentencias se ejecutan secuencialmente (una despus de la otra), pero con la diferencia con los lenguajes tradicionales que las seales solamente toman el valor asignado una vez ha concluido el process. Un process es un conjunto de instrucciones secuenciales que se activan segn haya ocurrido un cambio en alguna de las seales de entrada ubicadas en la lista de sensibilidad. Para clarificar estos aspectos, rescribamos el problema del multiplexor de 4 a 2 en forma funcional:

architecture mux42arq of mux42 is begin process ( A, B, S ) begin if ( S = '0' ) then Q <= A; else Q <= B; end if; end process; end mux42arq;

Puede verse que la definicin funcional es muy parecida a cmo se codifica en un lenguaje tradicional por medio de la sentencia if..then..else (si .. entonces .. de lo contrario). La condicin del if puede ser =, >, <, /= (diferente), >= (mayor e igual), <= (menor e igual), e inclusiva combinar dos condiciones con los operadores l gicos and, or, nand, nor. El argumento del process, (A,B,S), se denomina lista de sensibilidad e indica que el proceso solamente se ejecuta si ha ocurrido un cambio en las seales A, B o S.

Si se quiere insertar un if dentro del conjunto del else, esto se pude abreviar con la palabra reservada elsif. Lo anterior se emplea para implementar, por ejemplo, tablas de la verdad. Retomemos la tabla del problema anterior y veamos como implementarla con la sentencia if..elsif: architecture ejem2arq of ejemplo2 is begin process ( ABC ) begin if ((ABC = "000") or (ABC = "101")) then Q <= "01"; elsif ( (ABC = "001") or (ABC = "010") ) then Q <= "10"; elsif ( ABC = "110" ) then Q <= "11"; else Q <= "00"; end if; end process; end ejem2arq; Otra sentencia, similar al switch case de lenguaje C, es la sentencia case when. En este caso, el ejemplo anterior se codifica como: architecture ejem2arq of ejemplo2 is begin process ( ABC ) begin case ABC is when "000" => Q <= "01"; when "001" => Q <= "10"; when "010" => Q <= "10"; when "101" => Q <= "01"; when "110" => Q <= "11"; when others => Q <= "00"; end case; end process; end ejem2arq; PROBLEMAS. Para montar en el laboratorio: Proponer una unidad Aritmtico Lgico de 8 bits. La unidad de contar con las siguientes operaciones: Suma, Resta, Complemento a 1, Complemento a 2, rotacin a la izquierda, rotacin a la derecha, desplazamiento a la derecha, desplazamiento a la izquierda, and, nand, or, nor, xor, xnor, comparacin. As mismo, debe poseer las siguientes salidas: acarreo/prestamo; resultado = 0/comparacin A = B verdadera; resultado negativo/comparacin A < B verdadera; resultado positivo/comparacin A > B verdadera. Para probar el desempeo de la implementacin proponer diferentes esquemas de implementacin del sistema en notacin de flujo de datos y de comportamiento, con el fin de verificar en el Fitting Report el porcentaje de bloques lgicos configurables empleados.

Potrebbero piacerti anche