26
Edmundo Barajas Ramírez 1 Introducción a VHDL ¿ Qué es VHDL ? ¿ Qué es FPGA ? ¿ Qué significa PLD ? ¿ Qué es un HDL ? ¿ Cuál es la estructura básica de un diseño en VHDL ?

Vhdl2

Embed Size (px)

DESCRIPTION

Lenguaje VHDL

Citation preview

Page 1: Vhdl2

Edmundo Barajas Ramírez 1

Introducción a

VHDL

¿ Qué es VHDL ?

¿ Qué es FPGA ?

¿ Qué significa PLD ?

¿ Qué es un HDL ?

¿ Cuál es la estructura básica de un diseño

en VHDL ?

Page 2: Vhdl2

Edmundo Barajas Ramírez 2

Estilos de Descripción

Según el nivel de Abstracción:

Flujo de datos entre registros RTL.

Comportamiento ( Behavior ).

Estructural.

Page 3: Vhdl2

Edmundo Barajas Ramírez 3

Modelado de Flujo de Datos RTL

(Register Transfer Level)

Se hace uso de los operadores predefinidos

en las bibliotecas estándar del lenguaje y se

describe por medio de asignaciones como

establece el flujo de datos entre señales y

puertos del circuito.

Page 4: Vhdl2

Edmundo Barajas Ramírez 4

Modelado de Comportamiento

En la descripción por comportamiento se

define el funcionamiento del circuito a través

de algoritmos, se usan declaraciones de

mayor nivel de abstracción como IF THEN,

ELSIF, CASE THEN. Las funciones lógicas

a implementar quedan definidas por la

calidad de herramientas de síntesis.

Page 5: Vhdl2

Edmundo Barajas Ramírez 5

Modelado Estructural

Se utilizan componentes previamente

compilados y se interconectan entre si. (el

diseñador tiene mas control de la lógica que

se implementa).

La forma del código se asemeja a un “net-list”

de un diagrama esquemático.

Page 6: Vhdl2

Edmundo Barajas Ramírez 6

Tipos de Datos

VHDL ofrece los objetos tipo BIT_VECTOR

-- arreglos de bit´s para definir “buses”:

a : OUT BIT_VECTOR(7 DOWNTO 0);

b : IN BIT_VECTOR( 0 TO 3);

Page 7: Vhdl2

Edmundo Barajas Ramírez 7

Tipos de Datos

Entre vectores se pueden hacer

asignaciones de uno o varios Bit´s.

Ejemplos: a = 00001111, b =1011

a(5) <= b(3);

a = 00101111

……

a(5 DOWTO 3) <= b(1 to 3)

a = 00101111

Page 8: Vhdl2

Edmundo Barajas Ramírez 8

Tipos MLV (Multi Valued Logic)

IEEE std_logic_1164.all

‘U’ Un_initialized

‘Z’ High Impedance

‘-’ Don´t-care

Strong Drive

- ’x’ unknow

- ‘0’ Logic 0

- ‘1’ Logic 1

Week Drive

- ‘W’ unknow

- ‘L’ Logic 0

- ‘H’ Logic 1

Page 9: Vhdl2

Edmundo Barajas Ramírez 9

El Paradigma de VHDL

CONCURRENCIA: Las instrucciones no se

ejecutan en secuencia como en otros

lenguajes convencionales. Las instrucciones

al modelar hardware se ejecutan en

paralelo, a menos que se programe un

proceso, el cual es secuencial.

X<= A OR B; Z<= A AND X;

Z <= A AND X; X<= A OR B;

Page 10: Vhdl2

Edmundo Barajas Ramírez 10

Concurrencia

Resultados de Síntesis

X <= A OR B

Z <= X AND C

Page 11: Vhdl2

Edmundo Barajas Ramírez 11

Concurrencia

Resultados de Síntesis

Z <= C AND X

X <= A OR B

Page 12: Vhdl2

Edmundo Barajas Ramírez 12

Objetos en VHDL

Señales: Actuan como conexiones internas

del circuito entre un componente y otro.

Sintaxis: SIGNAL nombre: TIPO [ rango ]

Ejemplos:

SIGNAL X: BIT; -- para el ejemplo anterior.

SIGNAL cuenta: BIT_VECTOR(7 DOWNTO 0);

SIGNAL temp: INTEGER RANGE 0 TO 255;

Page 13: Vhdl2

Edmundo Barajas Ramírez 13

Objetos en VHDL

CONSTANTES: Permiten definir valores

fijos para facilitar la lectura del código. Solo

son validas dentro de la unidad de diseño

que se declaran (Entity, Architecture,

Process).

Sintaxis: CONSTANT nombre: TIPO := valor

Ejemplos:

CONSTANT tp: TIME := 16 ns;

CONSTANT v_ini: BIT_VECTOR(1 TO 0):= “10”;

Page 14: Vhdl2

Edmundo Barajas Ramírez 14

Objetos en VHDL

Elementos que se manipulan

Variables: Solo se utilizan dentro de

funciones, procedimientos y procesos. Su

valor actualiza inmediatamente despues de

la asignación.

Sintaxis: VARIABLE nombre: TIPO [ rango];

Ejemplo:

VARIABLE cuenta: INTEGER RANGE 0 TO 15;

Page 15: Vhdl2

Edmundo Barajas Ramírez 15

Sintaxis de asignación a un

Objeto según su clase

Para una señal o puerto: “ <= ”

Para una constante, variable y valor inicial “ := ”

Bit o std_logic: Usar comillas simles ‘x’

Bit_vector o std_logic_vector: Usar comillas

dobles. Ejemplo: Para un vector de 5 bit’s

“10011”

Enteros: Asignación directa, no usar comillas.

Page 16: Vhdl2

Edmundo Barajas Ramírez 16

Sintaxis de asignación a un

Objeto según su claseEjemplos:

signal a: std_logic;

signal b: std_logic_vector(5 downto 0);

signal c: boolean;

variable e: integer range 0 to 255;

BEGIN

a <= ‘1’; --usar comillas simples si no es vector

b <= “10111”; --usar comillas dobles se es vector

c <= TRUE; --puede tomar valores FALSE, TRUE

d := 34; --en enteros no usar comillas

Page 17: Vhdl2

Edmundo Barajas Ramírez 17

Otros Operadores

Operadores de Relación:

=, /=; --para todos los tipos

<, <=, >, >=; --para todos los tipos escalar y

--arreglos con rango discreto.

Operadores aritméticos:

+, - &(concatenación), *, /, MOD, REM,

**(exponente).

Page 18: Vhdl2

Edmundo Barajas Ramírez 18

Especificación

de la BasePara Vectores:

m<= H”D3”; --Hexadecimal

n <= O”234”; --Octal

p <= B”100110”; --Binario

Para Enteros:

q <= 16#B3#; --Hexadecimal

r <= 10#234#; --Decimal

s <= 2#100111#; --Binario

Base por defecto:

t <= 187+r; --Decimal, sin comillas

Page 19: Vhdl2

Edmundo Barajas Ramírez 19

Ejemplo: uso de std_logic

Entidad

Prueba

a

b

c

F(a,b,c)

1111

1011

0101

0001

1110

0010

0100

1000

fcba

Page 20: Vhdl2

Edmundo Barajas Ramírez 20

Ejemplo: uso de std_logic

--Ejemplo combinacional básico

library IEEE

use ieee.std_logic_1164.all

entity tabla is port (

a,b,c: in std_logic;

f : out std_logic );

end tabla;

architecture ejemplo of tabla is

begin

f <= ‘1’ when (a=‘0’ and b=‘0’ and c=‘0’) else

‘1’ when (a=‘0’ and b=‘1’ and c=‘1’) else

‘1’ when (a=‘1’ and b=‘1’ and c=‘0’) else

‘1’ when (a=‘1’ and b=‘1’ and c=‘1’) else

‘0’ ;

end ejemplo;

Page 21: Vhdl2

Edmundo Barajas Ramírez 21

Ejercicio: uso de std_logic

Una función F depende de cuatro variables

D,C,B,A donde A es la variable menos

significativa. La función F adopta el valor de

uno si el número formado por las cuatro

variables es inferior o igual a ocho y superior

a tres. En caso contrario la función F es cero.

Page 22: Vhdl2

Edmundo Barajas Ramírez 22

Ejercicio: uso de std_logic

Soluciónlibrary ieee

Use ieee.std_logic_1164.all

Entity funcion is port(

D,C,B,A: in std_logic;

f : out std_logic);

End funcion;

Architecture a_func of funcion is

Begin F <= ‘1’ when (D=‘0’ and C=‘0’ and B=‘1’ and A=‘1’) else

‘1’ when (D=‘0’ and C=‘1’ and B=‘0’ and A=‘0’) else

‘1’ when (D=‘0’ and C=‘1’ and B=‘0’ and A=‘1’) else

‘1’ when (D=‘0’ and C=‘1’ and B=‘1’ and A=‘0’) else

‘1’ when (D=‘0’ and C=‘1’ and B=‘1’ and A=‘1’) else

‘1’ when (D=‘1’ and C=‘0’ and B=‘0’ and A=‘0’) else

‘0’ ;

End a_func;

Page 23: Vhdl2

Edmundo Barajas Ramírez 23

Declaraciones concurrentes

asignadas a señales

En este tipo de declaración encontramos las

funciones de salida mediante la ecuación booleana

que describe el comportamiento de cada una de las

compuertas.

Page 24: Vhdl2

Edmundo Barajas Ramírez 24

Declaraciones concurrentes

asignadas a señalesLibrary ieee;

Use ieee.std_logic_1164.all;

Entity logic is port(

a,b,c,d,e,f: in std_logic;

f : out std_logic);

End logic;

Architecture booleana of logic is

Begin

x1 <= a xor b;

x2 <= (((c and d) or (a xor b)) nand ((e xor f) and (c and d)));

x3 <= (e xor f) and (c and d);

End booleana;

Page 25: Vhdl2

Edmundo Barajas Ramírez 25

Uso de std_logic_vector

Library ieee;

Use ieee.std_logic_1164.all;

Entity circuito is port(

a: std_logic_vector (1 downto 0);

c: out std_logic);

Architecture arq_cir of circuito is

Begin

with a select

c <= ‘1’ when “00”,

‘0’ when “01”,

‘1’ when “10”,

‘0’ when others

End arq_cir;

011

101

010

100

CA(1)A(0)

Page 26: Vhdl2

Edmundo Barajas Ramírez 26

Tarea

Modelar en VHDL un circuito medio sumador

Modelar en VHDL un circuito sumador total

Modelar en VHDL un circuito de cuatro

entradas llamadas num y una salida que

indique con un ‘1’ si num es primo y un ‘0’

cuando no lo es.