Digital II - ECA - dsi.fceia.unr.edu.ar · PDF fileEl bloque Process ... hardware en el...

Post on 03-Mar-2018

214 views 2 download

Transcript of Digital II - ECA - dsi.fceia.unr.edu.ar · PDF fileEl bloque Process ... hardware en el...

Rosa Corti

Digital II - ECA

Departamento de Sistemas e Informática

2015

VHDL

Very High speed integrated circuit Hardware Description Language

Contenido

Lógica programable - Dispositivos FPGA

Lenguaje VHDL: Evolución y características

Unidades de diseño: Entidad y Arquitectura

Objetos VHDL: señales

Tipos de datos – Bibliotecas usuales

Descripción de circuitos combinacionales

Sentencias de asignación concurrente

Ejemplos

Descripción de circuitos secuenciales

El bloque Process

Representación de la señal de reloj

Sentencias algorítmicas

Ejemplos

Resolución de señales

3

Evolución de metodologías y dispositivos

La electrónica digital ha incrementado sus áreas de aplicación

y la complejidad de los sistemas que se pueden implementar

Niveles de integración

Metodologías de diseño

Ambientes de diseño EDA

4

Dispositivos de lógica programable.

Primera generación

Segunda generación

Tercera generación

PLA (Programmable Logic Array)

PAL (Programmable Array Logic)

GAL (Generic Array Logic)

CPLD (Complex Programmable Logic Device )

FPGA (Field Programmable Gate Array)

DIGITAL II

PLA

5

Qué es una FPGA?

Dispositivo semiconductor basado en una matriz de

bloques lógicos configurables, cuya interconexión

es programable. El usuario puede reconfigurarla,

para cumplir con requerimientos específicos.

Dispositivo semiconductor cuya funcionalidad

y características se pueden definir luego de

fabricado e instalado, reconfigurando el

hardware en el circuito integrado.

6

Esquema general de la arquitectura

Flexibilidad

Paralelismo

7

FPGA: ¿ Cómo cambiar la lógica ?

PLD convencionales

LUT´s

FPGA

8

Función lógica representada en el CLB

9

Elementos básicos de la FPGA

Celdas o bloques lógicos (CLB)

• Multiplexor

• Registro (FF)

• LUT (Look Up Table)

Distintos usos:

Representar funciones lógicas

Memoria distribuida en el chip

Registros de 16 posiciones

10

Los bits permanecen en el

dispositivo que se configura

Configuración de una FPGA:

BITSTREAM

Un bit de configuración controla

un switch de conexión o un bit de

lógica

11

Se cambian las conexiones

y las funciones lógicas

FPGA µP

Se cambian las instrucciones

Cambia el Software Cambia el Hardware

Programación de un dispositivo

FPGA: Aspectos importantes

Flexibilidad

Velocidad – Arquitectura paralela

Prototipado rápido y simple

Desarrollo tolerante a fallas

Reducción del tiempo de puesta en el mercado de los productos

Implementación de SoC

Alta capacidad de procesamiento

Mantenimiento y actualización de los diseños

Mantenimiento a largo plazo de las aplicaciones

12

El procesamiento digital

de señales (DSP) es su

principal aplicación

Sistemas de visión artificial

Sistemas de imágenes médicas

Codificación y encriptación

Reconocimiento de voz

Radioastronomía

Aeronáutica y defensa

Dominios de aplicación

Fuente: Genera (2008) – www.generatecnologias.es

13

Fabricantes y participación en el mercado

www.xilinx.com

www.altera.com

www.microsemi.com

www.latticesemi.com

www.quicklogic.com

Fuente: High Tech Marketing (2011)

14

Volumen del mercado global FPGA: US$5.4 billion en 2013,

US$9.9 billion en 2020 (TABB Group - abril 2015)

Precios de dispositivos

www.em.avnet.com – 05/06/2013

1111

15

16

Diseño digital

CI de gran nivel de integración

Nuevas metodologías para manejar la

complejidad creciente de los diseños

Un lenguaje permite la edición más rápida y sencilla

Una descripción con esquemas resulta más fácil de entender

Descripción por esquemas Descripción VHDL

Nivel RT: Ingreso del diseño (Digital II)

Descripción mixta 17

18

Lenguajes de descripción de HW

Lenguajes de Descripción de Hardware (HDL)

Permiten descripciones de alto nivel

La edición es rápida y sencilla

Soportados por herramientas EDA

Las herramientas EDA permiten

integrar distintos estilos de diseño

19

DoD +IEEE Patrocinan el desarrollo en los 80´s

Es estándar de IEEE en 1987 VHDL-87

El estándar se amplía en 1993 VHDL-93

Existen otros HDL populares como ABEL y VERILOG

VHDL: Antecedentes históricos

Necesidad de estandarizar los diseños

Se realizaron modificaciones al estándar en 2001 y 2008

20

Se inicia como un leguaje de modelado y especificación.

Ligado a actividades de

Documentación

Simulación

Luego se incorporan herramientas de síntesis capaces

de manejar este tipo de descripciones

VHDL: Evolución

Ambientes integrados de diseño

21

Flujo de diseño VHDL orientado a FPGA

Análisis Código Síntesis Simulación

funcional

Mapeo, rutas

y ubicación

Simulación

post PAR Bitstream

VHDL

Construcciones básicas

23

VHDL: Características

Independencia tecnológica

Lenguaje de alto nivel

Organización del diseño

Reutilización de diseños

Control de flujo

¡¡ Se está describiendo HW!!

Portabilidad

Uso de componentes

Situaciones físicas en un circuito

Comportamiento paralelo

Es un diseño y no un programa

24

VHDL: Unidades de diseño básicas

Componentes

Dispositivo

VHDL Entidad Arquitectura

Declaración de I/O Descripción

comportamental

Caja negra Caja blanca

Descripción de un dispositivo VHDL

Diseño VHDL

Entidad

Archivo de texto

library IEEE;

use IEEE.std_logic_1164.all;

entity Puerta is

port (A, B:in std_logic_vector (3 downto 0);

C: out std_logic_vector (3 downto 0) );

end Puerta;

architecture Behavioral of Puerta is

begin

C <= A and B;

end Behavioral;

AND

1

2

3

Arquitectura

25

26

Colecciones de

unidades de diseño

Secciones mínimas de

código compilables en

forma independiente

Compuesto por

unidades de diseño

Bibliotecas

VHDL

Modelo

VHDL

Organizan el código

Promueven el reuso

Bibliotecas y unidades de diseño

27

Unidades de diseño VHDL

Se almacenan en bibliotecas (lenguaje y usuario)

Tienen relación jerárquica entre ellas

Entidad

Arquitectura

Cuerpo

Declaración

Configuración

Componentes

Paquetes

Tipos de datos

Constantes

Componentes

Subprogramas

………..

28

Unidades de diseño: Entidad

library IEEE;

use IEEE.std_logic_1164.all;

entity Puerta is

port ( A, B:in std_logic_vector (3 downto 0);

C: out std_logic_vector (3 downto 0) );

end Puerta;

Declaración de bibliotecas

Visibilidad de paquetes

Declaración de

puertos

INTERFAZ

Da nombre al módulo y define su conexión con el exterior

29

Puertos de la entidad

in: Entrada, se lee. No se le puede asignar valor.

out: Salida, se le asigna valor. No se puede leer.

inout: Entrada / Salida. CUIDADO !!

buffer: Salida / Puede ser usado en el sistema (leído).

port (nombre_señal : modo tipo_señal) ;

Modo

Tipo Define los valores y operaciones legales

Define cómo se lo utiliza

Los puertos de una entidad son señales

30

Objetos VHDL: señales

a

b

c

d

s

nd

x nc

Modelan hilos de un circuito

SEÑALES

31

Objetos VHDL

Un objeto en VHDL es un elemento que contiene

información de un tipo específico de datos.

Señales

Constantes

Variables

VHDL es un lenguaje fuertemente tipado.

32

VHDL: Tipos de datos

Un tipo de datos define los valores legales y los operadores

aplicables para los objetos de ese tipo.

Tipos de datos escalares Sus valores constituyen

una unidad indivisible

Tipos de datos compuestos Sus valores pueden dividirse en

unidades atómicas más pequeñas

No hay tipos propios del lenguaje,

existen tipos predefinidos

Se pueden definir tipos de datos en forma sencilla

Bibliotecas del sistema

33

VHDL: Tipos de datos

Tipos de datos predefinidos

Bit_vector (n-1 downto 0)

Modela buses

Es un arreglo de n bits

Escalares

Biblioteca Standard (STD)

BIT

BOOLEAN

INTEGER

REAL

Orientados a síntesis

Compuestos

34

Datos predefinidos: Ejemplos

Signal valor: integer range 0 to 255;

valor <= 128;

Signal Bus1, Bus2: Bit_vector (7 downto 0);

Bus1 <= “11001010”;

Bus2 <= “11” & Bus1(6 downto 1);

Operador concatenación

Declaración

Declaración

Asignación

Asignación

35

Datos definidos por el usuaro: Ejemplos

Type desplazamiento is (arriba, abajo, izquierda, derecha);

Signal puntero: desplazamiento;

Puntero <= arriba;

Escalar enumerado

Type memoria is array ( 0 to 63) of std_logic_vector(15 downto 0);

Signal MiMem: memoria;

Mimem (15) <= (others => ‘1’);

Mimen (7) <= “1111000011110000”;

Compuesto

36

VHDL: Tipos de datos

Para representar situaciones reales en los circuitos, la IEEE definió

dos tipos de datos multivaluados orientados a síntesis

Std_logic

Std_logic_vector (n-1 downto 0)

Modela líneas (escalar)

Modela buses (enumerado)

Los valores posibles en síntesis para un objeto de estos tipos son:

‘0’ valor bajo

‘1’ valor alto

‘Z’ alta impedancia

Biblioteca: IEEE

Paquete: std_logic_1164

37

library IEEE;

use IEEE.std_logic_1164.all;

entity circuito is

port ( a, b, c, d: in std_logic;

s: out std_logic );

end;

architecture arch_flu of circuito is

signal nc, nd, x: std_logic;

begin

nc <= not c;

nd <= not d;

x <= b and nc and nd ;

s <= a or x;

end arch_flu;

b

c s

nd

x nc

a

d

VHDL: Descripción de un circuito

Cada sentencia VHDL describe

un bloque HW

Interface del componente

38

Unidades de diseño: Arquitectura

architecture arch_flu of Circuito is

signal nc, nd, x: std_logic;

begin

nc <= not c;

nd <= not d;

x <= b and nc and nd ;

s <= a or x;

end arch_flu;

Descripción de la

funcionalidad del módulo

Declaración objetos utilizados

b

c s

nd

x nc

a

d

Se ligan arquitectura y entidad

Descripción de flujo de datos

Descripción algorítmica

Descripción estructural

VHDL

Descripción de circuitos combinacionales

40

Asignación concurrente de señal

Salida <= (a or b) and c;

Asignación condicional: WHEN … ELSE

Salida <= a when cond = “011” else b when cond < “010” else c;

Prioridad explícita entre las opciones

Se pueden usar varias expresiones booleanas distintas

La última opción de la sentencia es sin condición

Descripción en flujo de datos: Sentencias

41

Asignación con selección: WITH … SELECT … WHEN

Descripción en flujo de datos: Sentencias

with sel select

salida <= a when “00”,

b when “01”,

c when “11”,

d when others;

Las opciones no tienen una prioridad explícita entre ellas

La expresión de selección es única y todos sus valores deben

estar listados en las cláusulas mutuamente excluyentes

Multiplexores

42

architecture Behavioral of Cod_7seg is

begin

with HEX select

LED <= "1111001" when "0001", --1

"0100100" when "0010", --2

"0110000" when "0011", --3

"0011001 " when"0100", --4

"0010010" when "0101", --5

"0000010" when "0110", --6

"1111000 " when "0111", --7

"0000000" when "1000", --8

"0010000" when "1001", --9

"0001000" when "1010", --A

"0000011" when "1011", --b

"1000110" when "1100", --C

"0100001" when "1101", --d

"0000110" when "1110", --E

"0001110" when "1111", --F

"1000000" when others; --0

end;

Lógica negativa

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity Cod_7seg is

port ( HEX : in std_logic_vector( 3 downto 0);

LED:out in std_logic_vector( 6 downto 0));

end;

Descripción de Codificadores

43

Descripción de una memoria ROM

architecture behavioral of MROM is

type mem is array ( 0 to 15) of std_logic_vector(7 downto 0);

signal mi_Rom : mem;

begin

mi_Rom <= (

0 => "00000000",

1 => "00000001",

2 => "00000010",

3 => "00000011",

4 => "00000100",

5 => "11110000",

6 => "11110011",

7 => "11110111",

others => "11111111");

datos <= Mi_rom (CONV_INTEGER(dir));

end behavioral;

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity MROM is

port ( dir : in std_logic_vector(3 downto 0);

datos : out std_logic_vector(7 downto 0) );

end MROM;

Esquemático RTL

Tipo de datos

del usuario

44

VHDL: Operadores usados en Digital II

Lógicos

Relacionales

Aritméticos

Concatenación

Existe una gran cantidad de

operadores definidos para

distintos tipos de datos

Sólo un subconjunto está

orientado a síntesis

45

VHDL: Operadores usados en Digital II

Lógicos and, or, nor, xor, not

Definidos para: bit, bit_vector, std_logic, std_logic_vector, boolean

Los operandos deben ser del mismo tipo y tener la misma cantidad

de bits

Ejemplos

signal A, B, C, D: std_logic_vector (7 downto 0);

A <= “11001010”;

B <=“10011010”;

C <= A or B; (11011010)

D <= A and B; (10001010)

46

Relacionales = (igual) /= (distinto)

< (menor) <= (menor o igual)

> (mayor) >= (mayor o igual)

Definidos para: bit, bit_vector, std_logic, std_logic_vector,

boolean, integer

Los operandos deben ser del mismo tipo y pueden tener distinta

cantidad de bits

Las comparación de dos vectores, se realiza bit a bit alineando

ambas tiras de dígitos a partir del MSB de cada una.

Cuidado !!!

VHDL: Operadores usados en Digital II

47

VHDL: Operadores relacionales

Comparación de vectores de distinta cantidad de bits

signal A : std_logic_vector (7 downto 0);

signal B : std_logic_vector (3 downto 0);

A <= “00100100”;

B <= “0110”

A > B ? NO !!

48

Comparación de vectores

VHDL: Operadores relacionales

¿ Cómo se interpreta la tira de dígitos de std_logic_vector?

signal A : std_logic_vector (3 downto 0);

A <= “1010”;

¿A es igual a 10 o a -6?

49

La interpretación que se da a los datos std_logic_vector

depende de los paquetes que se incluyan en el diseño

Interpretación de std_logic_vector

STD_LOGIC_ARITH

STD_LOGIC_UNSIGNED

STD_LOGIC_SIGNED

Desarrollados por Synopsis.

Se distribuyen como parte de

la biblioteca IEEE.

Los incorporan muchos de los ambientes de diseño

Se instalaron como un estándar “de facto”

50

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.STD_LOGIC_UNSIGNED.all;

use IEEE.STD_LOGIC_SIGNED.all;

STD_LOGIC_VECTOR se interpreta como entero en C2

STD_LOGIC_VECTOR se interpreta como entero sin signo

Interpretación de std_logic_vector

51

Paquete NUMERIC_STD (IEEE):

library IEEE;

use IEEE.NUMERIC_STD.all; Para darle visibilidad:

Define los tipos signed y unsigned y operaciones aritméticas.

Define funciones de conversión entre signed, unsigned, integer

y std_logic_vector.

Se recomienda incorporarlo para desarrollos futuros

Se opera con datos signed o unsigned y luego se usa un cast para

convertirlos a std_logic_vector.

Interpretación de std_logic_vector

52

Ejemplo de comparación de vectores

COMP será falso si se incluyó el paquete UNSIGNED

signal A :std_logic_vector (3 downto 0);

signal B :std_logic_vector (3 downto 0);

signal COMP: boolean;

A <= “0110”;

B <= “1000”;

COMP <= A > B; COMP verdadero si se

incluyó el paquete SIGNED

VHDL: Operadores de comparación

53

VHDL: Comparador sin signo

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity compara is

port ( a : in std_logic_vector(3 downto 0);

b : in std_logic_vector(3 downto 0);

mayor: out std_logic);

end compara;

architecture Behavioral of compara is

begin

mayor <= '1' when a > b else '0';

end Behavioral;

54

VHDL: Comparador sin signo

Circuito RTL inferido por el ambiente

Simulación del modelo

55

VHDL: Comparador en C2

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_SIGNED.ALL;

entity comparaSig is

port ( a : in std_logic_vector(3 downto 0);

b : in std_logic_vector(3 downto 0);

mayor: out std_logic);

end comparaSig;

architecture Behavioral of comparaSig is

begin

mayor <= '1' when a > b else '0';

end Behavioral;

56

VHDL: Comparador en C2

Circuito RTL inferido

por el ambiente

Simulación del modelo

57

Aritméticos + (suma) - (resta)

Definidos para datos enteros (integer)

VHDL: Operadores usados en Digital II

Se pueden utilizar con vectores std_logic_vector

Se debe incluir el paquete correspondiente (SIGNED o UNSIGNED)

58

Concatenación (&)

Permite definir vectores a partir de líneas u otros vectores

VHDL: Operadores usados en Digital II

signal A :std_logic_vector (3 downto 0);

signal B :std_logic_vector (3 downto 0);

signal C: std_logic_vector (5 downto 0);

A <= “0110”;

B <=“1000”;

C <= A(3 downto 1) & B(2 downto 0); C será “011000”

59

VHDL: Sumador / Restador en C2

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_SIGNED.ALL;

entity SuRes is

port ( a : in std_logic_vector(3 downto 0);

b : in std_logic_vector(3 downto 0);

sub : in std_logic;

s : out std_logic_vector(4 downto 0));

end;

architecture Behavioral of SuRes is

begin

s <= (a(3) & a) + b when sub = '0'

else (a(3) & a) - b;

end;

Se completa formato

con bit de signo

Se previene OF

definiendo la salida

con un bit más

Se incluye el

paquete SIGNED

60

VHDL: Sumador / Restador en C2

61

VHDL: Sumador / Restador en C2

Simulación del modelo

Al trabajar con un bit más en la salida, se previene el sobreflujo

62

VHDL: Sumadores/Restadores

De acuerdo con la representación de datos adoptada

Incluir el paquete que corresponde

Completar formato en forma adecuada

Si el tamaño de bus está acotado y se requiere detectar OF

Se debe agregar en la descripción del sumador

VHDL

Descripción de circuitos secuenciales sincrónicos

64

Circuitos secuenciales sincrónicos

Las salidas dependen del estado interno del sistema

y, dependiendo del modelo, de las entradas.

MOORE

Interviene la señal de reloj

65

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity FF is

port ( entrada: in std_logic;

clk:in std_logic;

salida: out std_logic);

end;

architecture Behavioral of FF is

begin

process (clk)

begin

if clk'event and clk = '1' then salida <= entrada ;

end if;

end process ;

end;

Descripción de un elemento de memoria

Lista de sensibilidad

Descripción del

flanco activo de reloj

66

Procesos y bloques secuenciales sincrónicos

process (clk)

begin

if clk'event and clk = '1‘

then … ;

end if;

end process ;

En simulación, cada vez que

cambia alguna de las señales

se ejecuta el bloque

Activación del bloque PROCESS Lista de sensibilidad

Descripción del

flanco activo de reloj Las sentencias internas se ejecutan

secuencialmente

SIMULADOR:

El bloque es una sentencia concurrente

67

Se describen circuitos temporizados

Es necesario reconocer un flanco activo de reloj.

clk’event and clk = ‘1’

Expresiones reconocidas por XST para describir un flanco

ascendente de reloj

Circuitos secuenciales sincrónicos

(rising_edge(clk))

Atributo event de la señal de reloj

Función que recibe el reloj como argumento

68

El bloque process

Es una construcción de un mayor de abstracción

Su uso está ligado a un tipo de descripción “ALGORITMICA”

Permite otros elementos sintácticos

Condicionales

Selección

Bucles

Están ligados a una descripción de más alto nivel

69

Simulación de un FFD

El simulador adecúa

las ondas, respetando

el sincronismo

70

Sentencia condicional IF...THEN...ELSE

if condición then

sentencias

elsif condición then

sentencias

else

sentencias

end if ;

Esta estructura puede anidarse

elsif y else son optativas. Si

no se contemplan todas las

posibilidades, se infiere

almacenamiento.

Modela una selección

jerárquica.

El bloque process: Elementos sintácticos

Indicada para describir las señales de control

de bloques secuenciales sincrónicos

71

Sentencia condicional IF...THEN...ELSE

process ( a, b, c )

begin

if a > b then

p <= b;

elsif a > c then

p <= c;

elsif (a = c and c = b) then

p <= a;

else p <= ‘0’;

end if ;

end process ;

p < = b when a > b else

c when a > c else

a when (a = c and c = b) else

‘0’ ;

Con asignación “concurrente”

La lista sensible debe incluir todas las

señales cuyo cambio es importante.

Procesos y circuitos combinacionales

72

Sentencia de selección CASE

case expresión is

when caso1 = >

instrucciones

when caso2 = >

instrucciones

when others = >

instrucciones

end case ;

La expresión de selección debe ser discreta.

No puede haber casos duplicados.

Se deben cubrir todas las opciones de selección.

El bloque process: Elementos sintácticos

case sel is

when “10” = > s <= a;

when “00” = > s <= b;

when “01” => s <= c;

when others = > s <= d;

end case ;

MU

X

Sel (1:0)

a

d

sc

b

73

case sel is

when “10” = > s <= a;

when “00” = > s <= b;

when “01” => s <= c;

when others = > s <= d;

end case ;

Sentencia de selección CASE

La expresión de selección debe ser discreta.

No puede haber casos duplicados.

Se deben cubrir todas las opciones de selección.

Procesos y circuitos combinacionales

with sel select

s <= a when “10” ,

b when “00”,

c when “01”,

d when others;

MU

X

Sel (1:0)

a

d

sc

b

Con asignación “concurrente”

74

Modelado y simulación de la concurrencia

Se modela HARDWARE usando SOFTWARE

Concurrente Secuencial

C F

E

A

B

Las puertas deben funcionar

al mismo tiempo !!

No se puede modelar y simular en un

lenguaje convencional

VHDL: Simulación de la concurrencia

Las señales se actualizan luego de que el

simulador “procesa” una sentencia concurrente.

Cada vez que se presenta un evento

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity SimCon is

port ( a,b,c : in std_logic;

e,f : out std_logic);

end ;

architecture Behavioral of SimCon is

begin

e<= a and b;

f<= b or c;

end ;

¿Qué se debe incluir en la lista de sensibilidad?

Todas las señales cuyo cambio es importante !!

Procesos y simulación: Lista de sensibilidad

process (a,b,sel)

Circuito combinacional

Circuito secuencial sincrónico

Todas las señales que definen valores

El reloj si todas las señales

de control son sincrónicas

El reset asincrónico si existe

76

process (clk, reset)

77

Descripción de un registro de desplazamiento

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_unsigned.all;

--Registro con reset sincrónico, carga paralela y

--desplazamiento a la izquierda, prioridades en ese orden.

entity regis is

port (

din: in STD_LOGIC_VECTOR (3 downto 0);

clk: in STD_LOGIC;

r, l, shl: in STD_LOGIC;

sli: in STD_LOGIC;

dout: out std_logic_vector (3 downto 0)

);

end regis;

78

architecture register_arch of regis is

begin

process (clk)

variable bout : std_logic_vector (3 downto 0);

begin

if ( clk'event and clk = '1') then

if r = ‘1’ then bout := (others => ‘0’);

elsif l = ‘1’ then bout := din;

elsif shl ='1' then bout := bout (2 downto 0) & sli;

end if;

end if;

dout <= bout;

end process;

end register_arch;

Registro de desplazamiento: Continuación

Flanco ascendente del reloj.

Todas las señales de control son sincrónicas

Operador de

concatenación

Local al proceso

Deben ser declaradas dentro del proceso y son locales a él.

Su asignación es inmediata pero secuencial, al estar

en distintas sentencias en el proceso.

El orden de las sentencias es importante

Deben tener un valor asignado antes de utilizarlas.

No tienen significado físico

a := b or c;

d := e and a;

El bloque process y las variables

Variables vs. Señales

Señales Variables

Sintaxis destino<= fuente destino:= fuente

Utilidad Modelan nodos físicos del

circuito

Representan almacenamiento

local

Visibilidad Global (comunicación entre

procesos) Local (dentro del

proceso)

Comportamiento Se actualizan al avanzar el

tiempo (suspensión proceso) Se actualizan

inmediatamente

81

Registro de desplazamiento: Continuación

82

Descripción de un contador binario

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_unsigned.all;

-- Contador de 8 bits con reset asincrónico carga paralela y

-- habilitación de cuenta, con prioridades en ese orden.

-- La salida tc indica cuenta máxima.

entity contador is

port (

din: in STD_LOGIC_VECTOR (7 downto 0);

clk: in STD_LOGIC;

r, l, en: in STD_LOGIC;

tc: out STD_LOGIC;

cuenta: out std_logic_vector (7 downto 0)

);

end contador;

83

architecture contador_arch of contador is

signal bout : std_logic_vector (7 downto 0);

begin

process (clk, r)

begin

if r = ‘1' then bout <= (others => '0');

elsif ( clk'event and clk = '1') then

if l = '1' then bout <= din;

elsif en = '1' then bout <= bout +1;

end if;

end if;

end process;

cuenta <= bout;

tc <= '1' when bout = “11111111” else '0';

end contador_arch;

Contador binario: Continuación

El reset es asincrónico

En la misma arquitectura coexisten

distintos estilos de descripción

84

Contador binario: Continuación

Esquemático inferido

por el ambiente

Contador con

carga paralela,

reset asincrónico

y habilitación de

cuenta

85

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_SIGNED.ALL;

entity modulo1 is

Port ( a : in STD_LOGIC_VECTOR (3 downto 0);

clk : in STD_LOGIC;

r : in STD_LOGIC;

v: out STD_LOGIC;

s : out STD_LOGIC_VECTOR (4 downto 0));

end modulo1;

Circuito ejemplo: Interfaz

El subproceso “View schematic RTL”

muestra la interfaz del módulo y los

componentes que el sintetizador infiere

a partir de la descripción VHDL Módulo1

86

architecture Behavioral of modulo1 is

signal cuenta:STD_LOGIC_VECTOR (1 downto 0);

signal registro: STD_LOGIC_VECTOR (3 downto 0);;

begin

process (clk,r)

begin

if r = '1' then registro <= (others => '0');

elsif clk'event and clk = '1' then

registro <= a;

end if; end process;

process (clk,r)

begin

if r = '1' then cuenta <= (others => '0');

elsif clk'event and clk = '1' then

cuenta <= cuenta + 1;

end if; end process;

s <= a(3) & a + registro when cuenta = "11“ else (others => '0');

v <= '0' when cuenta = "11" else '1';

end Behavioral;

Circuito ejemplo: funcionamiento

Señales internas

Registro con

reset asincrónico

Contador con

reset asincrónico

Descripción

de las salidas

87

Circuito ejemplo: RTL inferido en ISE

88

Ejemplo: Simulación comportamental

Los estímulos cambian en el flanco descendente del reloj

Los estímulos cambian en el flanco ascendente del reloj

VHDL

Resolución de señales. Descripción de líneas y buses

compartidos

90

VHDL: Resolución de señales

91

VHDL: Resolución de señales

No se puede asignar valor a una señal en dos

sentencias “concurrentes” diferentes

¿¿¿ Cómo se pueden describir estos circuitos ???

92

VHDL: Resolución de señales

Descripción VHDL

Implementación HW

Tipos de datos resueltos

Buffers de tres estados

93

‘0’ -- 0 fuerte

‘1’ -- 1 fuerte

‘Z’ -- alta impedancia - tres estados

‘U’ -- no inicializado

‘X’ -- valor desconocido fuerte (conflicto entre val. fuertes)

‘W’ --valor desconocido débil (conflicto entre val. débiles)

‘L’ --0 débil

‘H’ --1 débil

‘-’ --sin importancia (don’t care)

Tipos std_ulogic y std_logic

Ambos tipos de datos pueden tomar 9 valores diferentes

94

Tipos std_ulogic y std_logic

¿¿¿ En qué se diferencian ???

Ambos tipos de datos pueden asumir

los mismos valores

Std_logic agrega a Std_ulogic una

FUNCIÓN DE RESOLUCIÓN

que plasma un modelo capaz de

resolver conflictos entre señales

95

Basado en fuerzas y valores lógicos.

Niveles lógicos básicos: 0; 1; L y H.

Las fuerzas pueden ser S, R y Z .

Modelo de resolución de señales

El estado de una línea en un

momento dado es la combinación

de una fuerza y un nivel lógico.

96

Se evalúa el valor de la fuerza (S>R>Z). La línea toma la fuerza y valor lógico de la señal ganadora.

Si las fuerzas son iguales, se evalúa el valor lógico, si son iguales, la línea toma el valor de cualquiera de ellos.

Si son valores lógicos distintos , la línea resulta X ó W según corresponda

Modelo de resolución de señales

En una contención (dos señales compiten por tomar control

sobre una línea)

97

0 1 H L Z

0 0 X 0 0 0

1 X 1 1 1 1

H 0 1 H W H

L 0 1 W L L

Z 0 1 H L Z

Función de resolución en std_logic

98

HAB. Hab Y

0 Z

1 ent

ent

Y

Buffer de tres estados

Es un componente HW que al estar deshabilitado,

entrega un nivel de alta impedancia como salida

Permite que varios módulos compartan líneas o buses tomando

control sobre los mismos según un esquema de acceso

07/09/2015 99

VHDL: Buffer de 3 estados

BufT

BufT

100

VHDL: Buffer de 3 estados

101

VHDL: Buffer de 3 estados

HAB.

HAB.

O

aux2

hab_2

hab_1

aux1

102

VHDL: Buffer de 3 estados

En síntesis XST detecta la descripción de un buffer T o de dos buffers T

Buffers T sólo disponibles en los bloques IO

En las descripciones del ejemplo hay un solo pad de salida

Al mapear se utiliza un solo buffer conectado al puerto

Se completa con lógica

Spartan3

103

Buffer de 3 estados: Ejemplo

Reset asincrónico prioritario

Carga paralela sincrónica

Reset asincrónico prioritario

Carga paralela sincrónica

Si no resetea ni carga, cuenta up

Si ER = 1 toma control el Registro

Si EC = 1 toma control el Contador

Registro

Contador

Bus DaIO

104

Buffer de 3 estados: Ejemplo

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Sistema1 is

Port ( lr,lc : in std_logic; -- señales de carga paralela

r,clk : in std_logic;

er,ec : in std_logic; -- Habilitaciones bloques

daio : inout std_logic_vector(3 downto 0)); -- bus I/O

end ;

RTL TOP

Definición de la interfaz

07/09/2015 105

Buffer de 3 estados: Ejemplo

architecture Behavioral of Sistema1 is

signal regA, cuenta:std_logic_vector(3 downto 0); -- Registro y contador

begin

process (clk,r) -- Descripción registro

begin

if r = '1' then regA<= (others => '0');

elsif clk = '1' and clk'event then if lr = '1' then

regA <= daio;

end if; end if;

end process;

process (clk,r) -- Descripción Contador

begin

if r = '1' then cuenta <= (others => '0');

elsif clk'event and clk = '1' then if lc = '1' then

cuenta <= daio; else cuenta <= cuenta +1;

end if; end if;

end process;

106

Buffer de 3 estados: Ejemplo

-- ======= Inicio bus io de 3 estados ======

-- Con 1 buffer T (4 lineas), quitar comentario a:

-- daio <= regA when er ='1' else cuenta when ec

= '1'else (others => 'Z');

-- Con 2 buffer T (4 lineas c/u), quitar comentario:

daio <= regA when er ='1' else (others =>'Z');

daio <= cuenta when ec = '1' else (others =>'Z');

-- ======== Fin bus io de 3 estados =======

end Behavioral;

Los Buffers T trabajan con lógica negativa

¿Preguntas?