others, soporte para síntesis

66
Others, soporte para síntesis. Los agregados tienen la habilidad de usar la sentencia others, la cual asignará un valor a todos los otros elementos de un arreglo que no han sido especificados. Finalmente, no todas las herramientas de síntesis soportan el uso de agregados, por lo que puede ser necesario usar concatenación para realizar manipulaciones sobre arreglos. X<= (3=>’1’, 1 =>’0’, others=>B) signal Z_BUS: bit_vector (3 downt 0); signal A,B,C,D: bit; signal BYTE:bit_vector(7 downto 0

Upload: reuben

Post on 12-Jan-2016

34 views

Category:

Documents


0 download

DESCRIPTION

signal Z_BUS: bit_vector (3 downto 0); signal A,B,C,D: bit; signal BYTE:bit_vector(7 downto 0);. Others, soporte para síntesis. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Others, soporte para síntesis

Others, soporte para síntesis.

Los agregados tienen la habilidad de usar la sentencia others, la cual asignará un valor a todos los otros elementos de un arreglo que no han sido especificados. Finalmente, no todas las herramientas de síntesis soportan el uso de agregados, por lo que puede ser necesario usar concatenación para realizar manipulaciones sobre arreglos.

X<= (3=>’1’, 1 =>’0’, others=>B)

signal Z_BUS: bit_vector (3 downto 0);signal A,B,C,D: bit;signal BYTE:bit_vector(7 downto 0);

Page 2: Others, soporte para síntesis

Necesidad de mas que el “0” y el “1”

El tipo bit tiene unas limitaciones, puede solo representar el 0 y el 1. En simulación puede ser útil el poder representar otros valores, por ejemplo: desconocido, no inicializado, alta impedancia. Mientras para la síntesis puede ser útil representar una condición: don’t care

Unknown El valor era conocido pero ya no lo es. A menudo denota dos compuertas manejando el mismo nodo de salida, con conflicto entre valores.

Un-initialised El valor nunca fue conocido (prepower-up)

High Impedance La red no tiene driver

Drive strengths Maneja diferentes drivers de salida

Don’t care Implementación en sintesis. No estamos interesados en el comportamiento de la entrada/salida, la salida no esta siendo monitoreada bajo ciertas condiciones de entrada o ciertas condiciones de entrada que nunca se espera que ocurran

Page 3: Others, soporte para síntesis

Lógica de valores múltiples

La idea de una lógica de valores múltiples, o un sistema LVM lleva un tipo de señal enumerado definido por todos los valores, junto con un grupo de funciones que realizan operaciones lógicas tales como: AND y OR sobre objetos de ese tipo.

High impedance

“Z”

Logic 0

“0”

Logic 1

“1”

Un-initialised

“U”

Unknown

“X”

Don’t care

“-”

Page 4: Others, soporte para síntesis

0

?

0

1

1

cc Output

input

VDD

Compuerta inversora NMOS Estática

Page 5: Others, soporte para síntesis

Compuerta inversora NMOS Estática

RONPU

ROFFPD

Input=L

Output=Vdd ROFFP

ROFFPD RON

PU+=H

VDD

RONPU

RONPD

Output=Vdd RONPD

RONPD RON

PU+=L

VDD

Input=H

VDD

H

L

Page 6: Others, soporte para síntesis

0

0

0

1

1

cc Output

input

VDD

Compuerta inversora NMOS Estática

Page 7: Others, soporte para síntesis

OBJETOS MANIPULABLES

Los objetos que se pueden manipular en VHDL son:

1 SEÑALES: Los “ports” declarados dentro de una entidad son señales.

2 CONSTANTES: permiten definir valores permanentes

3 VARIABLES: utilizados solamente dentro de los procesos(instrucciones secuénciales).

4 ARCHIVOS (FICHEROS)

Page 8: Others, soporte para síntesis

Declaraciòn de Objetos

La formula de declaraciòn de constantes, variables y señales es:

Tipo_de_Objeto Nombre_de_Objeto Tipo_de_Dato:=Valor Inicial

Por ejemplo:

SIGNAL nodno1: BIT:='1';VARIABLE var1:BIT;CONST pi: REAL:=3.14159;

Page 9: Others, soporte para síntesis

Señales

Son objetos que permiten simular la interconexión de componentes dentro de la arquitectura de diseño.

Permiten representar entradas o salidas de entidades.

Page 10: Others, soporte para síntesis

Señales

X0 y x1 no tienen asignada una terminal en la entidad de diseño (funcionan como un medio de interconexión).

Page 11: Others, soporte para síntesis

Sintaxis general de una señal

signal id {,...} : tipo [:= expresion ];port ( { id {, ...} : direccion tipo [:= expresion];}]

Signal Reloj : std _logic :='0';signal Comparacion: bit;signal Resultado : integer range 0 to 7;port ( a,b : in integer range 0 to 7; c : out integer range 0 to 7; d : inout std_logic );

Page 12: Others, soporte para síntesis

Señales

Forma de declarar una señal:signal identificator: tipo: [rango];

Ejemplo:signal vcc: bit: ´1´;signal suma: bit_vector: (3 downto 0);

Page 13: Others, soporte para síntesis

Señales

las señales pueden declararse en una entidad, en una arquitectura o en un paquete.

si se quiere inicializar una señal hay que indicar un valor en [:=expression]

por ejemplo: signal s: bit:='1'; de otra manera, el valor es inicializado al valor

mas bajo del tipo de variable definido.

Page 14: Others, soporte para síntesis

Señales

Escalar: signal name(s):=type [range_contraint][:=expression];

Vectorial: signal name(s): array_type[index_constraint] [:=expression];

Entidad: port (name(s): direction type [range_constraint][:=expression]);

Page 15: Others, soporte para síntesis

Señales

Ejemplos: signal count: integer range 1 to 50; (el valor inicial será

1) signal GROUND: BIT:='0'; signal YS_BUS std_logic_vector (7 downto 0); port (B,A: in integer range 0 to 9); signal bogus: bit_vector; (Errónea, no hay dimensión)

Page 16: Others, soporte para síntesis

Driver de señal

• Un conductor (driver) para una señal se define por el proceso que asigna valores a la señal.

• Los valores que viajan por los caminos de datos en un tiempo dado están contenidos en dicho conductor, el cual consta de una colección de parejas (tuplas) valor/tiempo llamadas transacciones.

Page 17: Others, soporte para síntesis

Asignación múltiple o concurrente

Los “conductores” son creados por sentencias de asignación de señales.

Una asignación concurrente de señal dentro de una arquitectura produce un “conductor” para cada asignación de señal. Asignaciones múltiples producirán “conductores” múltiples de señal.

Page 18: Others, soporte para síntesis

Creación de un driver

ARCHITECTURE t1 OF d1 IS

BEGIN

a <= b AFTER 10 ns ;

a <= c AFTER 10 ns ;

END t1;

Page 19: Others, soporte para síntesis

Función de resolución

La señal ´”a” está siendo manejada por dos fuentes, b y c.

Cada asignación concurrente creará un conductor para la señal a, esto no es admitido a menos que se defina una función de resolución (resolved signals).

La forma en que esto se resuelve queda a cargo del diseñador.

Page 20: Others, soporte para síntesis

Atributos función de las señales

S´EVENT Retorna verdadero si ocurrió un evento en S durante el corriente delta, de lo contrario devuelve falso.

S´ACTIVE Retorna verdadero si ocurrió una transición en S durante el corriente delta, else falso.

S´LAST_EVENT Retorna el tiempo transcurrido desde la transición previa de la señal S.

S´LAST_VALUE Retorna el valor previo de S antes del último evento.

S´LAST_ACTIVE Retorna el tiempo transcurrido desde la transacción previa de la señal.

Page 21: Others, soporte para síntesis

Señales de tipo definido

Habiendo definido el tipo, podemos definir señales de este tipo. Aquí hemos declarado la señal STATE de tipo MY_STATE. Debemos observar las reglas estrictas cuando usemos estas señales: no podemos asignar nada a la señal STATE que no sea del tipo MY_STATE

type MY_SATE is(RESET, IDLE, RW_CYCLE, INT_CYCLE);

…Signal STATE: MY_STATE;Signal TWO_BIT: bit_vector (0 to 1);…

STATE<=RESET;

STATE<=“00”;

STATE<=TWO_BIT;

Page 22: Others, soporte para síntesis

CONSTANTES

Una constante es un objeto que se inicializaa un determinado valor y no puede ser cambiado una vez inicializado.

Sintaxis general de una constante

constant id {,...} : tipo [:= expresion];

Page 23: Others, soporte para síntesis

Ejemplos

Constant Pi: real : =3.1415;constant BitsPalabra : integer :=8;constant NumPalabras : integer :=64;constant NumBits : integer :=BitsPalabras * NumPalabras;constant RetardoAND2 , RetardoOR2 : time := 2 ns

Page 24: Others, soporte para síntesis

VARIABLES

Una variable es un objeto que se inicializa a un determinado valor y a diferencia de una constantesu valor puede ser alterado en cualquier instante.

Sintaxis general de una variable

variable id {,....} : tipo [expresion];

Page 25: Others, soporte para síntesis

Ejemplos

Variable Indice1, Indice2, Indice3 : integer := 0;variable Comparacion : boolean;variable Resultado : real;

Page 26: Others, soporte para síntesis

ARCHIVOS (FICHEROS)

Permiten comunicar un diseño VHDL con el exterior, el modelo lee y escribe datos persistentes.

En el paquete texti o de la biblioteca standar haytipos de datos y operaciones de lectura/escritura de archivos de texto.

VHDL soporta subprogramas para leer y escribir archivos en forma secuencial.

Page 27: Others, soporte para síntesis

Sintaxis general de un archivo

file id {,....} : tipo [is direcciòn “nombre” ;]file id {,....} : tipo [ [ open tipo_acceso] is “nombre”;]

Ejemplos

file Estimulos : FicheroEnteros open read_mode is “datos.in”;file Salida : FicheroEnteros open write_mode id “datos.out”;

Page 28: Others, soporte para síntesis

ASIGNACION DE UN VALOR

A una señal se le asigna un valor, en VHDL, por medio de una sentencia de Asignación de señal.

Una Asignación a una señal define un driver sobre esa señal.

Se pueden tener multilples drivers.

Page 29: Others, soporte para síntesis

DEFINICION DE PUERTOS

Señales que relacionan una entidad con otra

Page 30: Others, soporte para síntesis

Forma genérica de designar un puerto

nombre_variable: modo tipo;

Ejemplos:

puertoa: in bit; puertob: in bit_vector(0 to 7); puertoc: out bit_vector(3 downto 0);puertod: buffer bit; puertoe:inout std_logic;

Page 31: Others, soporte para síntesis

in  Un puerto es de modo in si la información correspondiente al mismo, entra a la entidad y se suele usar para relojes, entradas de control (como las típicas load, reset y enable), y para datos de entrada unidireccionales.

Modo de Puerto

out  Un puerto es de modo out si la información fluye hacia fuera de la entidad. Este modo no permite realimentación ya que al declarar un puerto como out estamos indicando al compilador que el estado lógico en el que se encuentra no es leíble.

buffer  Este modo es similar al modo out, pero además, permite la realimentación y no es bidireccional, y solo puede ser conectado directamente a una señal interna, o a un puerto de modo buffer de otra entidad. Una aplicación muy común de este modo es la de salida de un contador, ya que debemos saber la salida en el momento actual para determinar la salida en el momento siguiente.

inout Es usado para señales bidireccionales, es decir, si necesitamos que por el mismo puerto fluya información tanto hacia dentro como hacia afuera de la entidad. Este modo permite la realimentación interna y puede reemplazar a cualquiera de los modos anteriores, pudiéndose usar este modo para todos los puertos.

Page 32: Others, soporte para síntesis

Tipos Nativos para VHDL

booleanPuede tomar dos valores: verdadero/true o falso/false. Un ejemplo típico es la salida de un comparador que da verdadero si los números comparados son iguales y falso si no lo son

bitPuede tomar dos valores: 0 ó 1 ( o también "low" o "high", según se prefiera). Es el tipo más usado de los nativos

bit_vector Es un vector de bits. Debemos tener cuidado al definir el peso de los bits que lo integran, ya que según pongamos la palabra reservada downto o to estaremos diciendo que el bit más significativo es el número más alto o el más bajo del vector, respectivamente..

numero : bit_vector (0 to 7);numero : bit_vector (7 downto 0);

integer Para mantenerr números enteros. Hay que advertir que el uso de enteros consume muchos recursos del dispositivo de lógica programable, siempre y cuando sea sintetizable, debido a que está prácticamente creado para la simulación.

Page 33: Others, soporte para síntesis

• Definir un modelo de comportamiento sintetizable (ARCHITECTURE)Usando el juego de instrucciones soportado por las herramientas de síntesis

architecture archpro of programa is

-- Declaración de señales y otros accesorios

Begin

-- Núcleo del programa

End archpro;

Para describir una arquitectura podremos usar cuatro estilos

Estilo behavioral Estilo dataflow Estilo structural Estilo mixto

Page 34: Others, soporte para síntesis

Estilo behavioral

architecture behavioral of compa isbegincomp: process (a, b)  begin   if a= b then    igual<='1';   else    igual<='0';   end if;  end process comp;end behavioral;

entity compa is port (a,b: in bit_vector(3 downto 0);igual: out bit);end compa;

Estilo dataflow

architecture dataflow1 of compa isbegin   igual<='1' when (a=b) else '0';end dataflow1;

architecture dataflow2 of compa isbegin   igual<= not(a(0) xor b(0))       and not(a(1) xor b(1))       and not(a(2) xor b(2))       and not(a(3) xor b(3));end dataflow2;

Page 35: Others, soporte para síntesis

Estilo structural

architecture struct of compa issignal x: bit_vector(0 to 3);

Component xnor2 Port (e1,e2:in bit; y:out bit);End component;

Component and4 Port (e1,e2,e3,e4:in bit; y:out bit);End component;

begin u0: xnor2 port map (a(0),b(0),x(0)); u1: xnor2 port map (a(1),b(1),x(1)); u2: xnor2 port map (a(2),b(2),x(2)); u3: xnor2 port map (a(3),b(3),x(3)); u4: and4 port map (x(0),x(1),x(2),x(3),igual);end struct;

Estilo mixto

Page 36: Others, soporte para síntesis

Estilo de Escritura RTL (Register Transfer Level)

Netlist Describe los componentes que posee y las conexiones entre ellos (Estilo Estructural)

RTL Describe el comportamiento de cada entidad

Page 37: Others, soporte para síntesis

CONCEPTO DE TIPO DE DATO

Todos los objetos en VHDL son de un tipo dado. Un tipo de dato se caracteriza por el conjunto de valores que puede tomar y los operadores que

se le puede aplicar a un objeto.

Page 38: Others, soporte para síntesis

TIPO

El tipo define un conjunto de valores y una asignación a esa señal debe ser un valor definido por ese conjunto.

Cuando hacemos una asignación a una señal, los tipos en ambos lados del operador de asignación de señal deben corresponder.

Page 39: Others, soporte para síntesis

Declaraciòn de tipos de datosSintaxis general

type id is definiciòn_tipo;

Ejemplos

type DiaMes is range 1 to 31 ;type Dela31 is range 1 to 31;type Orientacion is (norte,sur,este,oeste);

Uso

constant DiasEnero : DiasMes :=31;variable DiaHoy : DiaMes;signal Direcciòn : Orientacion;

Page 40: Others, soporte para síntesis

Los tipos deben corresponder

Cuando hacemos una asignaciòn a una señal, los tipos en ambos lados del operador de asignaciòn de señal deben corresponder.

Ejemplo: Entity HALFADD is port (A,B : in bit; SUM, CARRY : out bit); end HALFADD;

Page 41: Others, soporte para síntesis

Tipos predefinidos

Escalares Enumerados BOOLEAN,BIT,CHARACTER Enteros INTEGER Físicos TIME Flotantes REAL

Compuestos Arrays STRING,BIT_VECTOR

Page 42: Others, soporte para síntesis

• Otros

Puntero

ACCESS

Archivos

FILE

Page 43: Others, soporte para síntesis

TIPO BOOLEAN

Este tipo de dato puede tomar un valor

falso o verdadero

TRUE FALSO

Cuando se comparan dos valores de tipo boolean

el resultado también es de tipo boolean.

Page 44: Others, soporte para síntesis

TIPO BIT

El tipo BIT sirve para modelar niveles lógicos.Conjunto de valores ‘0’ y ‘1’

Operaciones definidas sobre el: Lógicas: not,and,nand,or,nor,xor y xnor Comparación: ‘=‘, ‘/=‘,’<‘, ‘<=‘, ‘>’, ‘>=‘ Concatenación: &

type bit is (‘0’, ‘1’)

Page 45: Others, soporte para síntesis

TIPO CHARACTER

Se utiliza para definir un solo carácter.

‘A’

‘b’

‘x’

Page 46: Others, soporte para síntesis

TIPO INTEGERUn tipo integer es un dato cuyo contenido es unvalor numerico entero que esta dentro del siguiente rango :2,147,483,647 a +2,147,483,647.

Ejemplos+1682-139+239

TYPE Integer IS 0 TO 255;TYPE index IS RANGE 7 DOWNTO 1;

Page 47: Others, soporte para síntesis

TIPO TIME

El tipo TIME sirve para especificar valores de

tiempo en los modelos

Se define la unidad básica y las derivadas de ellas.

type time is orange -2147483647 to 2147483647

units

fs;

ps = 1000 fs;

ns = 1000 ps;

us = 1000 ns;

min = 60 sec;

end units;

Page 48: Others, soporte para síntesis

TIPO REAL

Conocidos también como coma flotante,

son los tipos que definen un numero

real. Al igual que los enteros se definen

mediante la palabra clave RANGE, con la

diferencia de que los límites son números

reales.

Page 49: Others, soporte para síntesis

TIPO STRING

El tipo string se define como un arreglo

de cadenas de caracteres.

Ejemplos

“error en sincronia”

“Hola Mundo”

Page 50: Others, soporte para síntesis

TIPO BIT_VECTOR

El tipo bit_vector es un arreglo de bit: Permite modelar buses con un solo driver Solo admite valores ‘0’ y ‘1’

"0101_1001"x"00AF"

type bit_vector is array (natural range <>) of bit;

Page 51: Others, soporte para síntesis

SUBTIPOS DE DATOS

VHDL permite la definición de subtipos

que son restricciones o subconjuntos de

tipos existentes.

Hay dos tipos, el primero son subtipos

obtenidos a partir de la restricción de un

tipo escalar a un rango.

Page 52: Others, soporte para síntesis

Ejemplo:

SUBTYPE raro IS integer RANGE 4 TO 7;SUBTYPE digitos IS character RANGE '0' TO '9';

El segundo tipo de subtipos son aquellos que restringen el rango de una matriz:

Ejemplo:

SUBTYPE id IS string(1 TO 20);SUBTYPE word IS bit_vector(31 DOWNTO 0);

Page 53: Others, soporte para síntesis

Tipos enumerated.

Un tipo de datos definido por el usuario es conocido en VHDL como un tipo enumerated. Lo más común es definir los tipos dentro de un paquete, arquitectura o proceso, y la mayoría de las herramientas de síntesis son capaces de sintetizar VHDL que contiene tipos enumerated.

Page 54: Others, soporte para síntesis

Síntesis de tipo enumerated La mayoría de las herramientas de síntesis pueden construir lógica desde una señal

del tipo enumerated. Usualmente la señal tiene el número mínimo de bits requerido para representar el número de valores posibles. Este ejemplo muestra cada como cada valor es usualmente codificado en la implementación del hardware.

RESET “00”IDLE “01”RW “10”INT_CYCLE “11”

Mínimo número de bits

type MY_SATE is(RESET, IDLE, RW_CYCLE, INT_CYCLE);

Codificación de derecha a izquierda en secuencia binaria

Page 55: Others, soporte para síntesis

TIPO PREDEFINIDO (enumerated)

Son especificados como código fuente de VHDL, y se encontran en un paquete llamado STANDARD:

Boolean Time Bit Bit_vector

Character String Integer real

Page 56: Others, soporte para síntesis

STANDARD_LOGIC

El Estándar 1164 está definido en código fuente VHDL puro y describe un tipo de dato llamado “std_ulogic”, el cual define los nueve estados posibles.

Page 57: Others, soporte para síntesis

TIPO STD_ULOGIC

El tipo std_ulogic es un tipo de dato unresolved, y puede tener un solo driver. De hecho, la “u” se refiere al hecho de que es de tipo unresolved.

Page 58: Others, soporte para síntesis

TIPO STD_LOGIC

Hay otro tipo definido, llamado “std_logic”. el cual es una versión tipo resolved de std_ulogic y

puede tener mas de un driver. El tipo std_logic tiene los mismos nueve estados de

std_ulogic.

Page 59: Others, soporte para síntesis

VECTORES TIPO STD_LOGIC Y STD_ULOGIC

El paquete también contiene la definición de los arreglos de std_logic y std_ulogic, conocidos como std_logic_vector y std_ulogic_vector. estos tipos tienden a ser usados para describir estructuras de bus en la forma como el tipo bit_vector.

Los tipos std_logic y std_logic_vector, son los recomendados para usar en los diseños.

La razón para esto es que hay otros estandares para usar VHDL que están basados en estos tipos en lugar de std_ulogic y std_ulogic_vector.

Page 60: Others, soporte para síntesis

Asignar std_logic a std_ulogic.

Como se muestra en el diagrama es posible asignar objetos de tipo std_logic a objetos del tipo std_ulogic, y viceversa.

Page 61: Others, soporte para síntesis

std_logic para drivers múltiples

Si hay múltiples drivers en una señal se debe usar el tipo std_logic, ya que no es valido tener mas de un driver en un tipo de dato unresolved.

Z o RES_Z ?

signal A,B,Z: std_ulogic;

signal RES_Z: std_logic;

Z<= A; Z<= B;

RES_Z<= A; RES_Z<= B;

Page 62: Others, soporte para síntesis

Cláusulas library y use

El paquete de definiciones está contenido en una biblioteca llamada IEEE. Es necesario hacer referencia tanto a la biblioteca como al paquete, como es mostrada en el diagrama. Se deben usar estas líneas de código antes de describir las entidades que usan en el Standard Logic.

library IEEE; --hace visible la biblioteca

use IEEE.Std.Logic_1164.all; --hace todo el contenido del paquete visible

entity MVLS is

port (A,B: in std_ulogic;

Z: out std_ulogic);

end MVLS;

Page 63: Others, soporte para síntesis

OPERADORES LOGICOS

Tienen la misma precedencia, y se ejecutan de izquierda a derecha en la sentencia.

Page 64: Others, soporte para síntesis

OPERADORES RELACIONALES

Los operadores deben ser del mismo tipo, pero el número de bits comparados puede ser diferentes.

Page 65: Others, soporte para síntesis

OPERADORES ARITMETICOS

Operan sobre objetos de tipo INTEGER.

Pueden igualmente operar sobre STD_LOGIC_VECTOR utilizando los paquetes STD_LOGIC_UNSIGNED y STD_LOGIC_ARITH.

Page 66: Others, soporte para síntesis

OPERADORES DE DESPLAZAMIENTO

rol ( rotate left ) ror ( rotate right ) sll ( shift left logical ) srl ( shift rigth logical ) sla ( shift left arithmetic ) sra ( shift right arithmetic )

Operan sobre objetos de tipo: bit_vector std_logic_vector, std_ulogic_vector