Está en la página 1de 28

INTRODUCCIN A LA PROGRAMACIN EN VHDL

Dpto. Arquitectura de Computadores y Automtica Ingeniera Informtica Facultad de Informtica Universidad Complutense de Madrid

Profesores: Marcos Snchez-lez marcos@fis.ucm.es M Carmen Molina

Laboratorio de Estructura de Computadores

ndice
I. Introduccin ............................................................................................................ 3 II. Elementos Bsicos de VHDL........................................................................... 4 2.1 Identificadores............................................................................................... 4 2.2 Operadores........................................................................................................... 6 III. Estructura Bsica de un Archivo fuente en VHDL...................... 8 3.1 Entidades (Entity) ....................................................................................... 8 3.2 Arquitectura (Architecture).................................................................. 9 3.3 Sentencias de descripcin..................................................................... 10 3.4 Descripcin Estructural ......................................................................... 11 3.5 Descripcin por comportamiento(behavioural) ......................... 12 3.6 Ejemplos ............................................................................................................. 13 IV. Descripcin de Lgica Secuencial........................................................ 16 4.1 Ejemplos ............................................................................................................. 17 V. Diseo de una Mquina de Estados .......................................................... 19 VI. Funciones, Procedimientos y Paquetes .............................................. 22 6.1 Funciones ........................................................................................................... 22 6.2 Procedimiento ................................................................................................. 23 6.3 Ejemplo................................................................................................................ 23 VII. Ejemplo: Diseo de una Memoria RAM................................................. 25 Apndice ........................................................................................................................... 27

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

I. Introduccin
VHDL es un lenguaje de descripcin de circuitos electrnicos digitales que utiliza distintos niveles de abstraccin. El significadde las siglas VHDL es VHSIC (Very High Speed Integrated Circuits) Hardware Description Language. Esto significa que VHDL permite acelerar el proceso de diseo. VHDL no es un lenguaje de programacin, por ello conocer su sintaxis no implica necesariamente saber disear con l. VHDL es un lenguaje de descripcin de hardware genrico, que permite describir circuitos sncronos y asncronos. Para realizar esto debemos: - Pensar en puertas y biestables, no en variables ni funciones. - Evitar bucles combinacionales y relojes condicionados. - Saber qu parte del circuito es combinacional y cul secuencial. Los circuitos descritos en VHDL pueden ser simulados utilizando herramientas de simulacin para reproducir el funcionamiento del circuito. Adems utilizando herramientas de sntesis se puede implementar dicho circuito en un dispositivo lgico programable o en un circuito integrado. Webs y Noticias Relacionadas con la programacin en VHDL y sus herramientas de simulacin y sntesis www.edacafe.com Espacio web dedicado a difundir las noticias relacionadas con el mundo del diseo de circuitos. Tiene un foro particular de VHDL (problemas, herramientas gratuitas ) www.eda.org/vasg/ Welcome to the VHDL Analysis and Standardization Group (VASG). The purpose of this web site is to enhance the services and communications between members of the VASG and users of VHDL. We've provided a number of resources here to help you research the current and past activities of the VASG and report language bugs, LRM ambiguities, and suggest improvements to VHDL www.cadence.com Cadence Design Systems is the world's largest supplier of EDA technologies and engineering services. Cadence helps its customers break through their challenges by providing a new generation of electronic design solutions that speed advanced IC and system designs to volume www.xilinx.com In the world of digital electronic systems, there are three basic kinds of devices: memory, microprocessors, and logic. Memory devices store random information such as the contents of a spreadsheet or database. Microprocessors execute software instructions to perform a wide variety of tasks such as running a word processing program or video game. Logic devices provide specific functions, including device-to-device interfacing, data communication, signal processing, data display, timing and control operations, and almost every other function a system must perform

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

II. Elementos Bsicos de VHDL


VHDL es un lenguaje y como tal, posee sus tipos de datos y operadores. Los datos se almacenan en objetos que contienen valores de un tipo dado.

2.1 Identificadores
Constant. Los objetos de esta clase tienen un valor inicial que es asignado de forma previa a la simulacin y que no puede ser modificado durante sta. o constant identificador: tipo:= valor; Variable. Los objetos de esta clase contienen un nico valor que puede ser cambiado durante la simulacin con una sentencia de asignacin. Las variables generalmente se utilizan como ndices, principalmente en instrucciones de bucle, o para tomar valores que permitan modelar componentes. Las variables NO representan conexiones o estados de memoria. o variable identificador: tipo [:= valor]; Signal. Los objetos de esta clase contienen una lista de valores que incluye el valor actual y un conjunto de valores futuros. Las seales representan elementos de memoria o conexiones y si pueden ser sintetizadas. Los puertos de una entidad son implcitamente declarados como seales en el momento de la declaracin, ya que estos representan conexiones. Tambin pueden ser declaradas en la arquitectura antes del BEGIN, lo cual nos permite realizar conexiones entre diferentes mdulos. o signal identificador: tipo;

VHDL permite utilizar tipos predefinidos, as como otros definidos por el usuario. BIT 0, 1 * BIT_VECTOR (range ) BOOLEAN TRUE, FALSE CHARACTER {ascii} STRING {ascii} SEVERITY_LEVEL {WARNING, ERROR, FALURE} INTEGER range* NATURAL range* POSITIVE range* REAL range* TIME * (range: n_min TO n_max; n_max DOWNTO n_min)

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

STD_LOGIC Tipo predefinido en el estndar IEEE 1164. Este tipo representa una lgica multivaluada de 9 valores. Adems del 0 lgico y el 1 lgico, posee alta impedancia Z, desconocido X sin inicializar U entre otros. Igual que se permite crear un vector de bits se puede crear un vector de std_logic, STD_LOGIC_VECTOR. Para poder utilizar el tipo std_logic hay que aadir la librera que lo soporta. Para poder utilizar el tipo: use ieee.std_logic_1164.all. Para poder utilizar las funciones aritmeticolgicas definidas multiplicacin) use ieee.std_logic_arith.all. Si los vectores estn en representacin binaria pura use ieee.std_logic_unsigned.all. Los vectores estn en C2 use ieee.std_logic_unsigned.all.

(suma,

resta

TIPO ENUMERADO es un tipo de dato con un grupo de posibles valores asignados por el usuario. Los tipos enumerados se utilizan principalmente en el diseo de mquinas de estados type nombre is (valor1, valor2, ); Los tipos enumerados se ordenan de acuerdo a sus valores. Los programas de sntesis automticamente codifican binariamente los valores del tipo enumerado para que estos puedan ser sintetizados. Algunos programas lo hacen mediante una secuencia binaria ascendente, otros buscan cual es la codificacin que mejor conviene para tratar de minimizar el circuito o para incrementar la velocidad del mismo una vez que la descripcin ha sido sintetizada. Tambin es posible asignar el tipo de codificacin mediante directivas propias de la herramienta de sntesis. TIPOS COMPUESTOS un tipo compuesto es un tipo de dato formado con elementos de otros tipos, existen dos formas de tipos compuestos, arrays y records. Un ARRAY es un objeto de datos que consiste en una coleccin de elementos del mismo tipo. type nombre is array (rango) of tipo; Un RECORD es un objeto de datos que consiste en una coleccin de elementos de distintos tipos. type nombre is record elemento1: tipo_de_dato1; elemento2: tipo_de_dato2; end record;

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

constant DATA_WIDTH: integer := 8; signal CTRL: bit_vector(7 downto 0); variable SIG1, SIG2: integer range 0 to 15; ------------------------------------------------------------type color is (rojo, amarillo, azul); signal BMP: color; color <= rojo; ------------------------------------------------------------type word is array (0 to 15) of bit_vector (7 downto 0); signal palabra: word; word(0) <= 00111110; word(1) <= 00011010; word(15) <= 11111110; ------------------------------------------------------------type matrix is array (0 to 15)(7 downto 0) of bit; signal matriz: matrix; matriz(2)(5)<=1; ------------------------------------------------------------type conjunto is record palabra: std_logic_vector (0 to 15); valor: integer range -256 to 256; end record; signal dato: conjunto; dato.valor <= 176;

2.2 Operadores
Un operador nos permite construir diferentes tipos de expresiones mediante los cuales podemos calcular datos utilizando diferentes objetos de datos con el tipo de dato que maneja dicho objeto. En VHDL existen distintos operadores de asignacin con lo que se transfieren valores de un objeto de datos a otro, y operadores de asociacin que relacionan un objeto de datos con otro, lo cual no existe en ningn lenguaje de programacin de alto nivel. abs *, /, mod, rem + (sig.), - (sig) +, -, & and, or, nand, nor, xor := asignacin de valores a constantes y variables. <= asignacin de valores a seales.

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

y <= (x1 and x2) or d(0); y(1)<= x1 and not x2; y <= x1&x2; -- y=x1x2 c := 27 + r;

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

III. Estructura Bsica de un Archivo fuente en VHDL


El archivo VHDL contiene la descripcin del circuito que se quiere implementar.

3.1 Entidades (Entity)


Una entidad es la abstraccin de un circuito, ya sea desde un complejo sistema electrnico hasta una simple compuerta lgica. La entidad nicamente describe la forma externa del circuito, aqu se enumeran las entradas y las salidas del diseo. Una entidad es anloga a un smbolo esquemtico de los diagramas electrnicos, el cual describe las conexiones del dispositivo hacia el resto del diseo. ENTITY - Define externamente al circuito o subcircuito. - Nombre y nmero de puertos, tipos de datos de entrada y salida. - Tienes toda la informacin necesaria para conectar tu circuito a otros circuitos.

A B

entity F is port (A, B: in bit; Y out bit); end F; Los puertos pueden ser de entrada in, salida out, entrada-salida inout o un buffer; se utilizar el modo inout cuando Adems, la entidad puede definir un valor genrico (GENERIC) que se utilizar para declarar las propiedades y constantes del circuito, independientemente de cual sea la arquitectura. entity nombre is generic (cte1: tipo := valor1; cte2: tipo:= valor 2; ); port (entrada1, entrada2, : in tipo; salida1, salida2, : out tipo; puertoi : modo tipo); end nombre;

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

3.2 Arquitectura (Architecture)


Los pares de entidades y arquitecturas se utilizan para representar la descripcin completa de un diseo. Una arquitectura describe el funcionamiento de la entidad a la que hace referencia. Si una entidad la asociamos con una caja en la que se enumeran las interfaces de conexin hacia el exterior, entonces la arquitectura representa la estructura interna de esa caja. ARCHITECTURE - Define internamente el circuito. - Seales internas, funciones, procedimientos, constantes - La descripcin de la arquitectura puede ser estructural o por comportamiento. architecture arch_name of entity_name is -- declaraciones de la arquitectura -- tipos -- seales -- componentes begin -- cdigo de descripcin -- instrucciones concurrentes -- ecuaciones booleanes process begin -- cdigo de descripcin end process; end arch_name; Una arquitectura se describe por comportamiento o por estructura. Una entidad puede tener ms de una arquitectura, pero cuando se compile se indica cual es la arquitectura que queremos utilizar.

architecture arch_name of entity_name is signal declarations; begin -- sentencias concurrentes (combinacionales) and, or, not, nand, xor, +, -- sentencias secuenciales process (sensitivity list) variable declarations; begin sentencias end process; end arch_name;
9 I. Informtica (UCM)

Laboratorio de Estructura de Computadores

PROCESS: Cuando en VHDL se escribe un process, dentro de l aparece la parte secuencial del circuito. La simulacin no entra en el process hasta que no haya variado alguna de las seales o variables de su lista de sensibilidad independientemente de lo que este contenido dentro del process. Por otro lado nicamente dentro de un process pueden aparecer las sentencias de tipo if y else y nunca puede aparecer una sentencia del tipo wait.

3.3 Sentencias de descripcin


WAIT esta instruccin es utilizada en procesos que no tienen lista de sensibilidad: wait on signal_list; wait for time_expression; wait until condition; Eventos sobre las seales (EVENT) nos indican cuando ocurre un cambio en la seal signal'event signal'last_event signal'last_value

IF THEN ELSE solo son aplicables dentro de un process if condicin then ... --sequential statements elsif otra_condicin then ... --sequential statements else ... --sequential statements end if;

CASE WHEN solo son aplicables dentro de un process case expresin is when alternativa_l => ... --seq. statements when alternativa_n => ... --seq. statements when others => ... --seq. statements end case;

10

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

FOR LOOP solo son aplicables dentro de un process for loop_var in range loop ... --sequential statements end loop;

WHILE LOOP solo son aplicables dentro de un process while condicin loop ... --sequential statements end loop;

WHEN ELSE Signal_name <= valor_1 when condicin1 else valor_2 when condicin2 else ... valor_i when condicini else otro_valor;

WITH SELECT WHEN with identificador select Signal_name <= valor_1 when valor_identificador1, valor_2 when valor_identificador2, ... valor_i when valor_identificadori, otro_valor when others;

3.4 Descripcin Estructural


Esta descripcin utiliza entidades descritas y compiladas previamente. Se declaran los componentes que se utilizan y despus, mediante los nombres de los nodos, se realizan las conexiones entre las compuertas. Las descripciones estructurales son tiles cuando se trata de diseos jerrquicos. Una descripcin estructural: Describe las interconexiones entre distintos mdulos. Estos mdulos pueden a su vez tener un modelo estructural o de comportamiento. Normalmente esta es una descripcin a ms alto nivel.

11

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

entity entity_name is port(); end entity_name; architecture arch_name of entity_name is component component_name port (); end component; signal declarations; begin component_i: component_name port map (io_name) end arch_name;

GENERATE: Las secuencias de generacin de componentes permiten crear una o ms copias de un conjunto de interconexiones, lo cual facilita el diseo de circuitos mediante descripciones estructurales. for indice in rango generate -- instrucciones concurrentes end generate; --------------------------------component comp port( x: in bit; y: out bit); end component comp signal a, b: bit_vector(0 to 7) gen: for i in 0 to 7 generate u: comp port map(a(i),b(i)); end generate gen;

3.5 Descripcin por comportamiento(behavioural)


Las descripciones comportamentales son similares a un lenguaje de programacin de alto nivel por su alto nivel de abstraccin. Ms que especificar la estructura o la forma en que se deben conectar los componentes de un diseo, nos limitamos a describir su comportamiento. Una descripcin comportamental consta de una serie de instrucciones, que ejecutadas modelan el comportamiento del circuito. La ventaja de este tipo de descripcin es que no necesitamos enfocarnos a un nivel de compuerta para implementar un diseo.

12

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

Los mdulos que se suelen describir mediante comportamiento suelen ser: Mdulos que estn al final de la jerarqua en una descripcin estructural. Paquetes CI de una librera. Mdulos cuyo comportamiento es complicado para poderlo describir mediante una estructura. Process con wait, if, else, when, case ... Muchas veces las funciones dependen del tiempo, VHDL resuelve este problema permitiendo la descripcin del comportamiento en la forma de un programa tradicional.

3.6 Ejemplos
MULTIPLEXOR 2x1: Un multiplexor 2x1 se correspondera con el siguiente mdulo visto desde fuera:

Por lo que su entidad correspondiente sera: entity mux2 is port (D0, D1, S0: in std_logic; O out std_logic); end mux2; La descripcin de lo que hace internamente se puede realizar de varias maneras, as pues un multiplexor es un mdulo que hace: S0 0 1 O D0 D1

Lo cual podra corresponder perfectamente a la siguiente arquitectura: architecture behavioral1 of mux2 is begin O <= D1 when (S0 = 1) else D0; end behavioral1; a esta otra:

13

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

architecture behavioral2 of mux2 is begin multiplexor: process(D0,D1,S0) if(S0 = 1) then O <= D1; else O <= D0; end if; end process; end behavioral2; Tambin podemos saber mediante la realizacin de la tabla de verdad como est diseado por dentro un multiplexor:

Lo que dara como resultado la siguiente arquitectura si lo hacemos de manera estructural: architecture structural of mux2 is -- declaracin de componentes component AND2 port (I0,I1: in std_logic; O: out std_logic); end component; component OR2 port (I0,I1: in std_logic; O: out std_logic); end component; component INV port (I0,I1: in std_logic; O: out std_logic); end component; -- declaracin de seales signal S1,S2,S3: std_logic; begin U1: INV port map (S0,S1); U2: AND2 port map (D0,S1,S2); U3: AND2 port map (S0,D1,S3); U4: OR2 port map (S2,S3,O); end structural;

14

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

O esta otra si lo hacemos por comportamiento architecture mixed of mux2 is signal S1,S2: std_logic; begin S1 <= D0 and not S0; S2 <= D1 and S0; O <= S1 or S2; end mixed;

15

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

IV. Descripcin de Lgica Secuencial


Para la descripcin de biestables y registros utilizaremos procesos en los que la seal de reloj CLK ser la que acte por flanco. Podemos utilizar dos sentencias que representan una seal de reloj. if (CLKevent and CLK=1) then wait until CLKevent and CLK=1; Ambos casos representan una lgica secuencial que cambia con el flanco de subida. As pues si se quiere representar un biestable deberamos aadir el siguiente process: entity Biestable_D is port(in1, clk: in bit; out1: out bit); end Biestable_D; architecture ARCH of Biestable_D is begin process (clock) begin if (clock = '1') then out1 <= in1; end if; end process end ARCH; Biestable tipo D con reset asncrono. El proceso se activa cuando hay eventos en las seales de reset o clock como indica su lista de sensibilidad. La primera sentencia del proceso comprueba si la seal de reset est a 1. Si esta seal se ha activado el biestable se pone a cero. Si no se ha activado, el proceso funciona como el proceso descrito anteriormente. entity Biestable_rD is port(in1, clk, reset: in bit; out1: out bit); end Biestable_rD; architecture ARCH of Biestable_rD is begin process (clock, reset) begin if (reset = '1') then q <= '0'; elsif clock = '1' and clock'event then q <= d; end if; end process; end ARCH;

16

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

4.1 Ejemplos
REGISTRO DE 8 BITS entity registro_8 is port (clk, reset: in bit; A: in bit_vector(7 downto 0); B: out bit_vector(7 downto 0)); end registro; architecture arch_reg of registro_8 is begin process(clk, reset) begin if reset=1 then B<=00000000; elsif (clkevent and clk=1) then B<=A; end if; end process; end arch_reg;

REGISTRO DE 8 BITS A PARTIR DE BIESTABLES DE 1 BIT Definimos el registro de 8 bits como la unin de 8 biestables (descripcin concurrente): entity biestable is port (clk, reset, C: in bit; D: out bit); end biestable;

17

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

architecture arch of biestable is begin process(clk, reset) begin if reset=1 then D<=0; elsif (clkevent and clk=1) then D<=C; end if; end process; end arch; entity registro_8 is port (clk, reset: in bit; A: in bit_vector(7 downto 0); B: out bit_vector(7 downto 0)); end registro_8; architecture estructural of registro_8 is component biestable port(clk, reset, c: in bit; d: out bit); end component biestable; signal F: bit_vector(7 downto 0); begin gen: for i in 0 to 7 generate u: biestable port map(clk, reset, A(i),F(i)); end generate gen; B <= F; end estructural;

18

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

V. Diseo de una Mquina de Estados


VHDL permite realizar descripciones algortmicas de alto nivel de mquinas de estados. De esta forma, el diseador se evita tareas como generar la tabla de transicin de estados o la obtencin de las ecuaciones de excitacin basadas en tipo de biestable. registro

SIG_ESTADO CLK

ESTADO

Una Maquina de Estados Finita (FSM) se puede describir en VHDL de varias formas. En primer lugar en la seccin de declaraciones de la arquitectura, se define un tipo enumerado en el que se asignan identificadores a cada estado. Suele ser recomendable utilizar identificadores ilustrativos para los estados. La herramienta de sntesis ser la encargada de codificar estos estados. Posteriormente, en el cuerpo de la arquitectura se define la funcin de transicin de estados (F) y la funcin de salida (G) en uno o varios procesos. Por lo tanto tenemos: Un proceso secuencial que modela los biestables de estado; Por lo tanto que actualiza el estado (ESTADO). Un proceso combinacional que modela las funciones F y G; por lo tanto deriva el siguiente estado (ESTADO_SIG) y actualiza las salidas (O).

Para ilustrar la descripcin de mquinas de estados vamos a pensar en un ejemplo Se trata de disear una maquina de estados que active una salida S cuando se detecta la secuencia 001... en una lnea de datos E sincronizada con un reloj. Este detector de secuencia se puede realizar con una mquina de Moore de cuatro estados. S1: Esperar el l.er Cero de la secuencia. S2: Esperar el 2. Cero de la secuencia. S3: Esperar el uno de la secuencia y activar la salida S cuando llega. E=1 E=0 S1 O=0 E=1 E=1 E=0 E=0 S2 O=0 E=0 S3 O=0 E=1 S4 O=1

19

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

Para la implementacin en VHDL. Primero definimos un tipo enumerado, formado por los nombres de los estados y se declaran dos seales de este tipo: type ESTADOS is (S1, S2, S3, S4); signal ESTADO, ESTADO_SIG: ESTADOS; A continuacin creamos un proceso combinacional en el que se determina el siguiente estado (ESTADO_SIG) y la salida S en funcin del estado actual (ESTADO, E). El programa quedara al final de la siguiente manera: library IEEE; use IEEE.std_logic_1164.all; entity FSM is port(reset, E, clk: in bit; O: out bit); end FSM; architecture ARCH of FSM is type ESTADOS is (S1, S2, S3,S4); signal ESTADO, SIG_ESTADO: ESTADOS; begin SINCRONO: process(clk,reset) begin if reset ='1' then ESTADO<=S1; elsif clk'event and clk='1' then ESTADO<= SIG_ESTADO; end if; end process SINCRONO; CONTROL: process(ESTADO,E) begin case ESTADO is when S1 => O <= '0'; if (E='0') then

20

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

SIG_ESTADO<=S2; else SIG_ESTADO<=S1; end if; when S2 => O <= '0'; if (E='0') then SIG_ESTADO<=S3; else SIG_ESTADO<=S1; end if; when S3 => O <= '0'; G if (E='0') then SIG_ESTADO<=S3; else SIG_ESTADO<=S4; end if; when S4 => O <= '1'; if (E='0') then SIG_ESTADO<=S2; else SIG_ESTADO<=S1; end if; end case; end process control; end ARCH;

21

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

VI. Funciones, Procedimientos y Paquetes


VHDL permite utilizar dos tipos de subprogramas, que ayudan a mejorar la descripcin, estructuracin y legibilidad de los modelos: Funciones: Realizan un clculo puntual, devuelven un valor sin que corra el tiempo. Procedimientos: Pequeas descripciones de circuitos.

6.1 Funciones
No pueden modificar los parmetros que se les pasan (todos sern in). No pueden modificar seales ni variables declaradas externamente. Siempre devuelven un valor cuyo tipo se especifica en la propia declaracin de la funcin. Se ejecutan en tiempo nulo, por lo que no pueden contener ninguna sentencia wait. package nombre is -- declaracin de funciones function identificador() return tipo end package nombre; function identificador() return tipo -- seales, variables begin -- cuerpo del programa return valor; end function identificador;

22

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

6.2 Procedimiento
Posibilidad de intercambio bidireccional con el exterior Posibilidad de incluir una sentencia wait Posibilidad de efectuar asignaciones a seales Se define en la zona de declaraciones de la arquitectura procedure nombre(parmetros) -- seales, variables begin -- cuerpo del procedimiento end procedure nombre;

6.3 Ejemplo
EJEMPLO SUMA DE DOS VECTORS DE BIT UTILIZANDO PAQUETES
library IEEE; use IEEE.std_logic_1164.all; package ope_aritmeticas is function vector_to_natural (v:in std_logic_vector) return natural; function natural_to_vector (nat : in natural; length : in natural) return std_logic_vector; procedure vector_add ( v1, v2 : in std_logic_vector; v_result : out std_logic_vector); end ope_aritmeticas; package body ope_aritmeticas is function vector_to_natural (v:in std_logic_vector) return natural is variable aux : natural:=0; begin for i in v'range loop if v(i)='1' then aux := aux + (2**i); end if; end loop; return aux; end vector_to_natural; function natural_to_vector (nat : in natural; length : in natural) return std_logic_vector is variable v: std_logic_vector(length-1 downto 0); variable cociente, aux, i, resto: natural; begin

23

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

aux:= nat; i:=0; while (aux/=0) and (i<length) loop cociente := aux/2; resto := aux mod 2; if resto=0 then v(i):='0'; else v(i):='1'; end if; i := i+1; aux := cociente; end loop; for j in i to length-1 loop v(j):='0'; end loop; return v; end natural_to_vector; procedure vector_add ( v1, v2 : in std_logic_vector; v_result : out std_logic_vector) is variable suma,long: natural; begin long:=v1'length; suma:= vector_to_natural(v1) + vector_to_natural(v2); v_result := natural_to_vector(suma,long); end vector_add; end ope_aritmeticas; ------------------------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; use work.ope_aritmeticas.all; -- Para poder utilizar el paquete entity sum is port (v1,v2: in std_logic_vector; v_result : out std_logic_vector); end sum; architecture beh of sum is begin p1: process(v1, v2) variable suma: natural; begin vector_addu(v1,v2,suma); v_result<= suma; end process p1; end beh;

24

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

VII. Ejemplo: Diseo de una Memoria RAM


Utilizando todos los conceptos descritos hasta el momento podemos disear en VHDL una memoria RAM sncrona genrica con un puerto de lectura y otro de escritura, una seal de enable, otra de write y otra de read:
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; -- El paquete debe contener la funcin que pasa de std_logic_vector a -- natural, para poder acceder al array (ver seccin 6) entity SRAM is generic( w: d: a: port( Clock: Enable: Read: Write: Read_Addr: Write_Addr: Data_in: Data_out: ); end SRAM;

integer:=4; -- ancho de palabra integer:=4; -- n de palabras integer:=2); -- ancho direccin in std_logic; in std_logic; in std_logic; in std_logic; in std_logic_vector(a-1 downto 0); in std_logic_vector(a-1 downto 0); in std_logic_vector(w-1 downto 0); out std_logic_vector(w-1 downto 0)

architecture behav of SRAM is -- Utilizamos un array para guardar los valores de la memoria type ram_type is array (0 to d-1) of std_logic_vector(w-1 downto 0); signal tmp_ram: ram_type; begin -- Lectura process(Clock, Read) begin if (Clock'event and Clock='1') then if Enable='1' then if Read='1' then Data_out <= tmp_ram(std2n(Read_Addr)); else Data_out <= (Data_out'range => 'Z'); -- Todos los bits de Data_out se ponen a 'Z' end if; end if; end if; end process; -- Escritura process(Clock, Write) begin

25

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

if (Clock'event and Clock='1') then if Enable='1' then if Write='1' then tmp_ram(std2n(Write_Addr)) <= Data_in; end if; end if; end if; end process; end behav;

26

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

Apndice
Discusin utilizacin de seales frente a utilizacin de variables (signal vs variable) Las seales se utilizan para conectar los componentes del diseo llevando la informacin del estado actual del circuito a simular. Por otro lado las variables son utilizadas dentro de los procesos para computar valores particulares. El siguiente ejemplo muestra la diferencia: entity sig_var is port( d1, d2, d3: res1, res2: end sig_var;

in std_logic; out std_logic);

architecture behv of sig_var is signal sig_s1: std_logic; begin proc1: process(d1,d2,d3) variable var_s1: std_logic; begin var_s1 := d1 and d2; res1 <= var_s1 xor d3; end process; proc2: process(d1,d2,d3) begin sig_s1 <= d1 and d2; res2 <= sig_s1 xor d3; end process; end behv; Aparentemente los dos procesos deberan ofrecer el mismo resultado pues realizan las mismas operaciones

27

I. Informtica (UCM)

Laboratorio de Estructura de Computadores

El resultado de la simulacin es el siguiente:

Por qu res2 se pone a 1 ms tarde que res1?

Este manual fue inicialmente creado para la asignatura de Diseo y Test de Circuitos Integrados II de la titulacin de I. Electrnica ltima actualizacin septiembre 2006

28

I. Informtica (UCM)

También podría gustarte